Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Side by Side Diff: net/http/http_util_unittest.cc

Issue 1811163002: Share link header parsing code between blink and content. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@base-optional
Patch Set: rebase Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 6
7 #include "base/strings/string_util.h" 7 #include "base/strings/string_util.h"
8 #include "net/http/http_util.h" 8 #include "net/http/http_util.h"
9 #include "testing/gtest/include/gtest/gtest.h" 9 #include "testing/gtest/include/gtest/gtest.h"
10 10
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 // Replace <backslash> X with X 240 // Replace <backslash> X with X
241 EXPECT_STREQ("xyzXabc", HttpUtil::Unquote("\"xyz\\Xabc\"").c_str()); 241 EXPECT_STREQ("xyzXabc", HttpUtil::Unquote("\"xyz\\Xabc\"").c_str());
242 242
243 // Act as identity function on unquoted inputs. 243 // Act as identity function on unquoted inputs.
244 EXPECT_STREQ("X", HttpUtil::Unquote("X").c_str()); 244 EXPECT_STREQ("X", HttpUtil::Unquote("X").c_str());
245 EXPECT_STREQ("\"", HttpUtil::Unquote("\"").c_str()); 245 EXPECT_STREQ("\"", HttpUtil::Unquote("\"").c_str());
246 246
247 // Allow single quotes to act as quote marks. 247 // Allow single quotes to act as quote marks.
248 // Not part of RFC 2616. 248 // Not part of RFC 2616.
249 EXPECT_STREQ("x\"", HttpUtil::Unquote("'x\"'").c_str()); 249 EXPECT_STREQ("x\"", HttpUtil::Unquote("'x\"'").c_str());
250
251 // Allow quotes in the middle of the input.
252 EXPECT_STREQ("foo\"bar", HttpUtil::Unquote("\"foo\"bar\"").c_str());
253
254 // Allow the final quote to be escaped.
255 EXPECT_STREQ("foo", HttpUtil::Unquote("\"foo\\\"").c_str());
256 }
257
258 TEST(HttpUtilTest, StrictUnquote) {
259 std::string out;
260
261 // Replace <backslash> " with ".
262 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\"abc\"", &out));
263 EXPECT_STREQ("xyz\"abc", out.c_str());
264
265 // Replace <backslash> <backslash> with <backslash>.
266 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\abc\"", &out));
267 EXPECT_STREQ("xyz\\abc", out.c_str());
268 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\\\\\\\\\\\abc\"", &out));
269 EXPECT_STREQ("xyz\\\\\\abc", out.c_str());
270
271 // Replace <backslash> X with X.
272 EXPECT_TRUE(HttpUtil::StrictUnquote("\"xyz\\Xabc\"", &out));
273 EXPECT_STREQ("xyzXabc", out.c_str());
274
275 // Empty quoted string.
276 EXPECT_TRUE(HttpUtil::StrictUnquote("\"\"", &out));
277 EXPECT_STREQ("", out.c_str());
278
279 // Return false on unquoted inputs.
280 EXPECT_FALSE(HttpUtil::StrictUnquote("X", &out));
281 EXPECT_FALSE(HttpUtil::StrictUnquote("", &out));
282
283 // Return false on mismatched quotes.
284 EXPECT_FALSE(HttpUtil::StrictUnquote("\"", &out));
285 EXPECT_FALSE(HttpUtil::StrictUnquote("\"xyz", &out));
286 EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc'", &out));
287
288 // Return false on escaped terminal quote.
289 EXPECT_FALSE(HttpUtil::StrictUnquote("\"abc\\\"", &out));
290 EXPECT_FALSE(HttpUtil::StrictUnquote("\"\\\"", &out));
291
292 // Allow escaped backslash before terminal quote.
293 EXPECT_TRUE(HttpUtil::StrictUnquote("\"\\\\\"", &out));
294 EXPECT_STREQ("\\", out.c_str());
295
296 // Don't allow single quotes to act as quote marks.
297 EXPECT_FALSE(HttpUtil::StrictUnquote("'x\"'", &out));
298 EXPECT_TRUE(HttpUtil::StrictUnquote("\"x'\"", &out));
299 EXPECT_STREQ("x'", out.c_str());
300 EXPECT_FALSE(HttpUtil::StrictUnquote("''", &out));
250 } 301 }
251 302
252 TEST(HttpUtilTest, Quote) { 303 TEST(HttpUtilTest, Quote) {
253 EXPECT_STREQ("\"xyz\\\"abc\"", HttpUtil::Quote("xyz\"abc").c_str()); 304 EXPECT_STREQ("\"xyz\\\"abc\"", HttpUtil::Quote("xyz\"abc").c_str());
254 305
255 // Replace <backslash> <backslash> with <backslash> 306 // Replace <backslash> <backslash> with <backslash>
256 EXPECT_STREQ("\"xyz\\\\abc\"", HttpUtil::Quote("xyz\\abc").c_str()); 307 EXPECT_STREQ("\"xyz\\\\abc\"", HttpUtil::Quote("xyz\\abc").c_str());
257 308
258 // Replace <backslash> X with X 309 // Replace <backslash> X with X
259 EXPECT_STREQ("\"xyzXabc\"", HttpUtil::Quote("xyzXabc").c_str()); 310 EXPECT_STREQ("\"xyzXabc\"", HttpUtil::Quote("xyzXabc").c_str());
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 HttpUtil::NameValuePairsIterator default_parser(data.begin(), data.end(), 1146 HttpUtil::NameValuePairsIterator default_parser(data.begin(), data.end(),
1096 ';'); 1147 ';');
1097 EXPECT_TRUE(default_parser.valid()); 1148 EXPECT_TRUE(default_parser.valid());
1098 ASSERT_NO_FATAL_FAILURE( 1149 ASSERT_NO_FATAL_FAILURE(
1099 CheckNextNameValuePair(&default_parser, true, true, "alpha", "1")); 1150 CheckNextNameValuePair(&default_parser, true, true, "alpha", "1"));
1100 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&default_parser, false, false, 1151 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&default_parser, false, false,
1101 std::string(), std::string())); 1152 std::string(), std::string()));
1102 1153
1103 HttpUtil::NameValuePairsIterator values_required_parser( 1154 HttpUtil::NameValuePairsIterator values_required_parser(
1104 data.begin(), data.end(), ';', 1155 data.begin(), data.end(), ';',
1105 HttpUtil::NameValuePairsIterator::VALUES_NOT_OPTIONAL); 1156 HttpUtil::NameValuePairsIterator::Values::REQUIRED,
1157 HttpUtil::NameValuePairsIterator::Quotes::NOT_STRICT);
1106 EXPECT_TRUE(values_required_parser.valid()); 1158 EXPECT_TRUE(values_required_parser.valid());
1107 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&values_required_parser, true, 1159 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&values_required_parser, true,
1108 true, "alpha", "1")); 1160 true, "alpha", "1"));
1109 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( 1161 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(
1110 &values_required_parser, false, false, std::string(), std::string())); 1162 &values_required_parser, false, false, std::string(), std::string()));
1111 1163
1112 HttpUtil::NameValuePairsIterator parser( 1164 HttpUtil::NameValuePairsIterator parser(
1113 data.begin(), data.end(), ';', 1165 data.begin(), data.end(), ';',
1114 HttpUtil::NameValuePairsIterator::VALUES_OPTIONAL); 1166 HttpUtil::NameValuePairsIterator::Values::NOT_REQUIRED,
1167 HttpUtil::NameValuePairsIterator::Quotes::NOT_STRICT);
1115 EXPECT_TRUE(parser.valid()); 1168 EXPECT_TRUE(parser.valid());
1116 1169
1117 ASSERT_NO_FATAL_FAILURE( 1170 ASSERT_NO_FATAL_FAILURE(
1118 CheckNextNameValuePair(&parser, true, true, "alpha", "1")); 1171 CheckNextNameValuePair(&parser, true, true, "alpha", "1"));
1119 ASSERT_NO_FATAL_FAILURE( 1172 ASSERT_NO_FATAL_FAILURE(
1120 CheckNextNameValuePair(&parser, true, true, "beta", std::string())); 1173 CheckNextNameValuePair(&parser, true, true, "beta", std::string()));
1121 ASSERT_NO_FATAL_FAILURE( 1174 ASSERT_NO_FATAL_FAILURE(
1122 CheckNextNameValuePair(&parser, true, true, "cappa", std::string())); 1175 CheckNextNameValuePair(&parser, true, true, "cappa", std::string()));
1123 ASSERT_NO_FATAL_FAILURE( 1176 ASSERT_NO_FATAL_FAILURE(
1124 CheckNextNameValuePair(&parser, true, true, "delta", std::string())); 1177 CheckNextNameValuePair(&parser, true, true, "delta", std::string()));
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
1170 std::string data = "name='value"; 1223 std::string data = "name='value";
1171 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';'); 1224 HttpUtil::NameValuePairsIterator parser(data.begin(), data.end(), ';');
1172 EXPECT_TRUE(parser.valid()); 1225 EXPECT_TRUE(parser.valid());
1173 1226
1174 ASSERT_NO_FATAL_FAILURE( 1227 ASSERT_NO_FATAL_FAILURE(
1175 CheckNextNameValuePair(&parser, true, true, "name", "value")); 1228 CheckNextNameValuePair(&parser, true, true, "name", "value"));
1176 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair( 1229 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(
1177 &parser, false, true, std::string(), std::string())); 1230 &parser, false, true, std::string(), std::string()));
1178 } 1231 }
1179 1232
1233 TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotesEscapedEndQuote) {
1234 std::string data = "foo=bar; name=\"value\\\"";
1235 HttpUtil::NameValuePairsIterator parser(
1236 data.begin(), data.end(), ';',
1237 HttpUtil::NameValuePairsIterator::Values::REQUIRED,
1238 HttpUtil::NameValuePairsIterator::Quotes::STRICT_QUOTES);
1239 EXPECT_TRUE(parser.valid());
1240
1241 ASSERT_NO_FATAL_FAILURE(
1242 CheckNextNameValuePair(&parser, true, true, "foo", "bar"));
1243 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&parser, false, false,
1244 std::string(), std::string()));
1245 }
1246
1247 TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotesQuoteInValue) {
1248 std::string data = "foo=\"bar\"; name=\"va\"lue\"";
1249 HttpUtil::NameValuePairsIterator parser(
1250 data.begin(), data.end(), ';',
1251 HttpUtil::NameValuePairsIterator::Values::REQUIRED,
1252 HttpUtil::NameValuePairsIterator::Quotes::STRICT_QUOTES);
1253 EXPECT_TRUE(parser.valid());
1254
1255 ASSERT_NO_FATAL_FAILURE(
1256 CheckNextNameValuePair(&parser, true, true, "foo", "bar"));
1257 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&parser, false, false,
1258 std::string(), std::string()));
1259 }
1260
1261 TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotesMissingEndQuote) {
1262 std::string data = "foo=\"bar\"; name=\"value";
1263 HttpUtil::NameValuePairsIterator parser(
1264 data.begin(), data.end(), ';',
1265 HttpUtil::NameValuePairsIterator::Values::REQUIRED,
1266 HttpUtil::NameValuePairsIterator::Quotes::STRICT_QUOTES);
1267 EXPECT_TRUE(parser.valid());
1268
1269 ASSERT_NO_FATAL_FAILURE(
1270 CheckNextNameValuePair(&parser, true, true, "foo", "bar"));
1271 ASSERT_NO_FATAL_FAILURE(CheckNextNameValuePair(&parser, false, false,
1272 std::string(), std::string()));
1273 }
1274
1275 TEST(HttpUtilTest, NameValuePairsIteratorStrictQuotesSingleQuotes) {
1276 std::string data = "foo=\"bar\"; name='value; ok=it'";
1277 HttpUtil::NameValuePairsIterator parser(
1278 data.begin(), data.end(), ';',
1279 HttpUtil::NameValuePairsIterator::Values::REQUIRED,
1280 HttpUtil::NameValuePairsIterator::Quotes::STRICT_QUOTES);
1281 EXPECT_TRUE(parser.valid());
1282
1283 ASSERT_NO_FATAL_FAILURE(
1284 CheckNextNameValuePair(&parser, true, true, "foo", "bar"));
1285 ASSERT_NO_FATAL_FAILURE(
1286 CheckNextNameValuePair(&parser, true, true, "name", "'value"));
1287 ASSERT_NO_FATAL_FAILURE(
1288 CheckNextNameValuePair(&parser, true, true, "ok", "it'"));
1289 }
1290
1180 TEST(HttpUtilTest, IsValidHeaderValueRFC7230) { 1291 TEST(HttpUtilTest, IsValidHeaderValueRFC7230) {
1181 EXPECT_TRUE(HttpUtil::IsValidHeaderValueRFC7230("")); 1292 EXPECT_TRUE(HttpUtil::IsValidHeaderValueRFC7230(""));
1182 1293
1183 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" ")); 1294 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" "));
1184 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" q")); 1295 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230(" q"));
1185 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q ")); 1296 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q "));
1186 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\t")); 1297 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\t"));
1187 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\tq")); 1298 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("\tq"));
1188 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q\t")); 1299 EXPECT_FALSE(HttpUtil::IsValidHeaderValueRFC7230("q\t"));
1189 1300
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1253 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModified)); 1364 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModified));
1254 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModified)); 1365 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModified));
1255 1366
1256 EXPECT_FALSE(HttpUtil::HasValidators(v1_1, kMissing, kLastModifiedInvalid)); 1367 EXPECT_FALSE(HttpUtil::HasValidators(v1_1, kMissing, kLastModifiedInvalid));
1257 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagStrong, kLastModifiedInvalid)); 1368 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagStrong, kLastModifiedInvalid));
1258 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModifiedInvalid)); 1369 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagWeak, kLastModifiedInvalid));
1259 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModifiedInvalid)); 1370 EXPECT_TRUE(HttpUtil::HasValidators(v1_1, kEtagEmpty, kLastModifiedInvalid));
1260 } 1371 }
1261 1372
1262 } // namespace net 1373 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_util.cc ('k') | third_party/WebKit/LayoutTests/http/tests/preload/resources/media-link-headers.php » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698