Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <errno.h> | 5 #include <errno.h> |
| 6 #include <stddef.h> | 6 #include <stddef.h> |
| 7 | 7 |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
| 10 #include "url/third_party/mozilla/url_parse.h" | 10 #include "url/third_party/mozilla/url_parse.h" |
| (...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 275 EXPECT_EQ(scheme_cases[i].expected_component.begin, out_comp.begin); | 275 EXPECT_EQ(scheme_cases[i].expected_component.begin, out_comp.begin); |
| 276 EXPECT_EQ(scheme_cases[i].expected_component.len, out_comp.len); | 276 EXPECT_EQ(scheme_cases[i].expected_component.len, out_comp.len); |
| 277 } | 277 } |
| 278 | 278 |
| 279 // Test the case where the scheme is declared nonexistent, it should be | 279 // Test the case where the scheme is declared nonexistent, it should be |
| 280 // converted into an empty scheme. | 280 // converted into an empty scheme. |
| 281 Component out_comp; | 281 Component out_comp; |
| 282 out_str.clear(); | 282 out_str.clear(); |
| 283 StdStringCanonOutput output(&out_str); | 283 StdStringCanonOutput output(&out_str); |
| 284 | 284 |
| 285 EXPECT_TRUE(CanonicalizeScheme("", Component(0, -1), &output, &out_comp)); | 285 EXPECT_FALSE(CanonicalizeScheme("", Component(0, -1), &output, &out_comp)); |
| 286 output.Complete(); | 286 output.Complete(); |
| 287 | 287 |
| 288 EXPECT_EQ(std::string(":"), out_str); | 288 EXPECT_EQ(std::string(":"), out_str); |
| 289 EXPECT_EQ(0, out_comp.begin); | 289 EXPECT_EQ(0, out_comp.begin); |
| 290 EXPECT_EQ(0, out_comp.len); | 290 EXPECT_EQ(0, out_comp.len); |
| 291 } | 291 } |
| 292 | 292 |
| 293 TEST(URLCanonTest, Host) { | 293 TEST(URLCanonTest, Host) { |
| 294 IPAddressCase host_cases[] = { | 294 IPAddressCase host_cases[] = { |
| 295 // Basic canonicalization, uppercase should be converted to lowercase. | 295 // Basic canonicalization, uppercase should be converted to lowercase. |
| (...skipping 1000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1296 // parts are included or excluded properly, and have the correct separators. | 1296 // parts are included or excluded properly, and have the correct separators. |
| 1297 struct URLCase { | 1297 struct URLCase { |
| 1298 const char* input; | 1298 const char* input; |
| 1299 const char* expected; | 1299 const char* expected; |
| 1300 bool expected_success; | 1300 bool expected_success; |
| 1301 } cases[] = { | 1301 } cases[] = { |
| 1302 {"http://www.google.com/foo?bar=baz#", "http://www.google.com/foo?bar=baz#", true}, | 1302 {"http://www.google.com/foo?bar=baz#", "http://www.google.com/foo?bar=baz#", true}, |
| 1303 {"http://[www.google.com]/", "http://[www.google.com]/", false}, | 1303 {"http://[www.google.com]/", "http://[www.google.com]/", false}, |
| 1304 {"ht\ttp:@www.google.com:80/;p?#", "ht%09tp://www.google.com:80/;p?#", false }, | 1304 {"ht\ttp:@www.google.com:80/;p?#", "ht%09tp://www.google.com:80/;p?#", false }, |
| 1305 {"http:////////user:@google.com:99?foo", "http://user@google.com:99/?foo", t rue}, | 1305 {"http:////////user:@google.com:99?foo", "http://user@google.com:99/?foo", t rue}, |
| 1306 {"www.google.com", ":www.google.com/", true}, | 1306 {"www.google.com", ":www.google.com/", false}, |
| 1307 {"http://192.0x00A80001", "http://192.168.0.1/", true}, | 1307 {"http://192.0x00A80001", "http://192.168.0.1/", true}, |
| 1308 {"http://www/foo%2Ehtml", "http://www/foo.html", true}, | 1308 {"http://www/foo%2Ehtml", "http://www/foo.html", true}, |
| 1309 {"http://user:pass@/", "http://user:pass@/", false}, | 1309 {"http://user:pass@/", "http://user:pass@/", false}, |
| 1310 {"http://%25DOMAIN:foobar@foodomain.com/", "http://%25DOMAIN:foobar@foodomai n.com/", true}, | 1310 {"http://%25DOMAIN:foobar@foodomain.com/", "http://%25DOMAIN:foobar@foodomai n.com/", true}, |
| 1311 | 1311 |
| 1312 // Backslashes should get converted to forward slashes. | 1312 // Backslashes should get converted to forward slashes. |
| 1313 {"http:\\\\www.google.com\\foo", "http://www.google.com/foo", true}, | 1313 {"http:\\\\www.google.com\\foo", "http://www.google.com/foo", true}, |
| 1314 | 1314 |
| 1315 // Busted refs shouldn't make the whole thing fail. | 1315 // Busted refs shouldn't make the whole thing fail. |
| 1316 {"http://www.google.com/asdf#\xc2", "http://www.google.com/asdf#\xef\xbf\xbd ", true}, | 1316 {"http://www.google.com/asdf#\xc2", "http://www.google.com/asdf#\xef\xbf\xbd ", true}, |
| (...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1747 EXPECT_EQ(10, out_parsed.scheme.len); | 1747 EXPECT_EQ(10, out_parsed.scheme.len); |
| 1748 if (success) | 1748 if (success) |
| 1749 EXPECT_GT(out_parsed.path.len, 0); | 1749 EXPECT_GT(out_parsed.path.len, 0); |
| 1750 } | 1750 } |
| 1751 } | 1751 } |
| 1752 | 1752 |
| 1753 TEST(URLCanonTest, CanonicalizePathURL) { | 1753 TEST(URLCanonTest, CanonicalizePathURL) { |
| 1754 // Path URLs should get canonicalized schemes but nothing else. | 1754 // Path URLs should get canonicalized schemes but nothing else. |
| 1755 struct PathCase { | 1755 struct PathCase { |
| 1756 const char* input; | 1756 const char* input; |
| 1757 bool expected_success; | |
| 1757 const char* expected; | 1758 const char* expected; |
| 1758 } path_cases[] = { | 1759 } path_cases[] = { |
| 1759 {"javascript:", "javascript:"}, | 1760 {"javascript:", true, "javascript:"}, |
| 1760 {"JavaScript:Foo", "javascript:Foo"}, | 1761 {"JavaScript:Foo", true, "javascript:Foo"}, |
| 1761 {":\":This /is interesting;?#", ":\":This /is interesting;?#"}, | 1762 {":\":This /is interesting;?#", false, ":\":This /is interesting;?#"}, |
|
Peter Kasting
2016/09/29 04:54:12
Should this have instead dropped the initial colon
| |
| 1762 }; | 1763 }; |
| 1763 | 1764 |
| 1764 for (size_t i = 0; i < arraysize(path_cases); i++) { | 1765 for (size_t i = 0; i < arraysize(path_cases); i++) { |
| 1765 int url_len = static_cast<int>(strlen(path_cases[i].input)); | 1766 int url_len = static_cast<int>(strlen(path_cases[i].input)); |
| 1766 Parsed parsed; | 1767 Parsed parsed; |
| 1767 ParsePathURL(path_cases[i].input, url_len, true, &parsed); | 1768 ParsePathURL(path_cases[i].input, url_len, true, &parsed); |
| 1768 | 1769 |
| 1769 Parsed out_parsed; | 1770 Parsed out_parsed; |
| 1770 std::string out_str; | 1771 std::string out_str; |
| 1771 StdStringCanonOutput output(&out_str); | 1772 StdStringCanonOutput output(&out_str); |
| 1772 bool success = CanonicalizePathURL(path_cases[i].input, url_len, parsed, | 1773 bool success = CanonicalizePathURL(path_cases[i].input, url_len, parsed, |
| 1773 &output, &out_parsed); | 1774 &output, &out_parsed); |
| 1774 output.Complete(); | 1775 output.Complete(); |
| 1775 | 1776 |
| 1776 EXPECT_TRUE(success); | 1777 EXPECT_EQ(path_cases[i].expected_success, success); |
| 1777 EXPECT_EQ(path_cases[i].expected, out_str); | 1778 EXPECT_EQ(path_cases[i].expected, out_str); |
| 1778 | 1779 |
| 1779 EXPECT_EQ(0, out_parsed.host.begin); | 1780 EXPECT_EQ(0, out_parsed.host.begin); |
| 1780 EXPECT_EQ(-1, out_parsed.host.len); | 1781 EXPECT_EQ(-1, out_parsed.host.len); |
| 1781 | 1782 |
| 1782 // When we end with a colon at the end, there should be no path. | 1783 // When we end with a colon at the end, there should be no path. |
| 1783 if (path_cases[i].input[url_len - 1] == ':') { | 1784 if (path_cases[i].input[url_len - 1] == ':') { |
| 1784 EXPECT_EQ(0, out_parsed.GetContent().begin); | 1785 EXPECT_EQ(0, out_parsed.GetContent().begin); |
| 1785 EXPECT_EQ(-1, out_parsed.GetContent().len); | 1786 EXPECT_EQ(-1, out_parsed.GetContent().len); |
| 1786 } | 1787 } |
| (...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2166 repl_output.Complete(); | 2167 repl_output.Complete(); |
| 2167 | 2168 |
| 2168 // Generate the expected string and check. | 2169 // Generate the expected string and check. |
| 2169 std::string expected("file:///foo?"); | 2170 std::string expected("file:///foo?"); |
| 2170 for (size_t i = 0; i < new_query.length(); i++) | 2171 for (size_t i = 0; i < new_query.length(); i++) |
| 2171 expected.push_back('a'); | 2172 expected.push_back('a'); |
| 2172 EXPECT_TRUE(expected == repl_str); | 2173 EXPECT_TRUE(expected == repl_str); |
| 2173 } | 2174 } |
| 2174 | 2175 |
| 2175 } // namespace url | 2176 } // namespace url |
| OLD | NEW |