Index: url/url_util_unittest.cc |
diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc |
index dfbdb40927e55aeebae171a530e2f32d8b766f60..70adc5b7fdc04ee3d98b1f154bc2cf9ad6e81af8 100644 |
--- a/url/url_util_unittest.cc |
+++ b/url/url_util_unittest.cc |
@@ -93,7 +93,7 @@ static std::string CheckReplaceScheme(const char* base_url, |
// Make sure the input is canonicalized. |
url_canon::RawCanonOutput<32> original; |
url_parse::Parsed original_parsed; |
- url_util::Canonicalize(base_url, strlen(base_url), NULL, |
+ url_util::Canonicalize(base_url, strlen(base_url), true, NULL, |
&original, &original_parsed); |
url_canon::Replacements<char> replacements; |
@@ -135,6 +135,9 @@ TEST(URLUtilTest, ReplaceScheme) { |
// http://crbug.com/160 which should also be an acceptable result. |
EXPECT_EQ("about://google.com/", |
CheckReplaceScheme("http://google.com/", "about")); |
+ |
+ EXPECT_EQ("http://example.com/%20hello%20# world", |
+ CheckReplaceScheme("myscheme:example.com/ hello # world ", "http")); |
} |
TEST(URLUtilTest, DecodeURLEscapeSequences) { |
@@ -270,12 +273,20 @@ TEST(URLUtilTest, TestResolveRelativeWithNonStandardBase) { |
// Resolving should fail if the base URL is authority-based but is |
// missing a path component (the '/' at the end). |
{"scheme://Authority", "path", false, ""}, |
+ // Test resolving a fragment (only) against any kind of base-URL. |
+ {"about:blank", "#id42", true, "about:blank#id42" }, |
+ {"about:blank", " #id42", true, "about:blank#id42" }, |
+ {"about:blank#oldfrag", "#newfrag", true, "about:blank#newfrag" }, |
+ // A surprising side effect of allowing fragments to resolve against |
+ // any URL scheme is we might break javascript: URLs by doing so... |
+ {"javascript:alert('foo#bar')", "#badfrag", true, |
+ "javascript:alert('foo#badfrag" }, |
}; |
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resolve_non_standard_cases); i++) { |
const ResolveRelativeCase& test_data = resolve_non_standard_cases[i]; |
url_parse::Parsed base_parsed; |
- url_parse::ParsePathURL(test_data.base, strlen(test_data.base), |
+ url_parse::ParsePathURL(test_data.base, strlen(test_data.base), false, |
&base_parsed); |
std::string resolved; |