| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/loader/LinkHeader.h" | 5 #include "platform/network/LinkHeader.h" |
| 6 | 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include <base/macros.h> | 8 #include <base/macros.h> |
| 9 | 9 |
| 10 namespace blink { | 10 namespace blink { |
| 11 namespace { | 11 namespace { |
| 12 | 12 |
| 13 TEST(LinkHeaderTest, Empty) | 13 TEST(LinkHeaderTest, Empty) |
| 14 { | 14 { |
| 15 String nullString; | 15 String nullString; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 27 const char* rel; | 27 const char* rel; |
| 28 const char* as; | 28 const char* as; |
| 29 const char* media; | 29 const char* media; |
| 30 } singleTestCases[] = { | 30 } singleTestCases[] = { |
| 31 {"</images/cat.jpg>; rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
""}, | 31 {"</images/cat.jpg>; rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
""}, |
| 32 {"</images/cat.jpg>;rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
""}, | 32 {"</images/cat.jpg>;rel=prefetch", true, "/images/cat.jpg", "prefetch", "",
""}, |
| 33 {"</images/cat.jpg> ;rel=prefetch", true, "/images/cat.jpg", "prefetch", "
", ""}, | 33 {"</images/cat.jpg> ;rel=prefetch", true, "/images/cat.jpg", "prefetch", "
", ""}, |
| 34 {"</images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch"
, "", ""}, | 34 {"</images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch"
, "", ""}, |
| 35 {"< /images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch
", "", ""}, | 35 {"< /images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch
", "", ""}, |
| 36 {"</images/cat.jpg > ; rel=prefetch", true, "/images/cat.jpg", "prefetch
", "", ""}, | 36 {"</images/cat.jpg > ; rel=prefetch", true, "/images/cat.jpg", "prefetch
", "", ""}, |
| 37 {"</images/cat.jpg wutwut> ; rel=prefetch", true, "/images/cat.jpg", "pr
efetch", "", ""}, | 37 {"</images/cat.jpg wutwut> ; rel=prefetch", true, "/images/cat.jpg wutwu
t", "prefetch", "", ""}, |
| 38 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true, "/images/cat.jpg"
, "prefetch", "", ""}, | 38 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true, "/images/cat.jpg
wutwut", "prefetch", "", ""}, |
| 39 {"</images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch",
"", ""}, | 39 {"</images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch",
"", ""}, |
| 40 {"</images/cat.jpg>; Rel=prefetch ", true, "/images/cat.jpg", "prefetch",
"", ""}, | 40 {"</images/cat.jpg>; Rel=prefetch ", true, "/images/cat.jpg", "prefetch",
"", ""}, |
| 41 {"</images/cat.jpg>; Rel=PReFetCh ", true, "/images/cat.jpg", "prefetch",
"", ""}, | 41 {"</images/cat.jpg>; Rel=PReFetCh ", true, "/images/cat.jpg", "prefetch",
"", ""}, |
| 42 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", true, "/images/cat.jp
g", "prefetch", "", ""}, | 42 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", true, "/images/cat.jp
g", "prefetch", "", ""}, |
| 43 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch"
, "", ""}, | 43 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch"
, "", ""}, |
| 44 {"\t </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetc
h", "", ""}, | 44 {"\t </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetc
h", "", ""}, |
| 45 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", true, "/images/cat.jpg", "pr
efetch", "", ""}, | 45 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", true, "/images/cat.jpg", "pr
efetch", "", ""}, |
| 46 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false}, | 46 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false}, |
| 47 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, | 47 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, |
| 48 {"<../images/cat.jpg?dog>; rel= prefetch", true, "../images/cat.jpg?dog", "p
refetch", "", ""}, | 48 {"<../images/cat.jpg?dog>; rel= prefetch", true, "../images/cat.jpg?dog", "p
refetch", "", ""}, |
| 49 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, | 49 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, |
| 50 {"</images/cat.jpg>; rel pel=prefetch", false}, | 50 {"</images/cat.jpg>; rel pel=prefetch", false}, |
| 51 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", "", ""}, | 51 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", "", ""}, |
| 52 {"</images/cat.jpg>; rel =", false}, | 52 {"</images/cat.jpg>; rel =", false}, |
| 53 {"</images/cat.jpg>; wut=sup; rel =prefetch", true, "/images/cat.jpg", "pref
etch", "", ""}, | 53 {"</images/cat.jpg>; wut=sup; rel =prefetch", true, "/images/cat.jpg", "pref
etch", "", ""}, |
| 54 {"</images/cat.jpg>; wut=sup ; rel =prefetch", true, "/images/cat.jpg", "pre
fetch", "", ""}, | 54 {"</images/cat.jpg>; wut=sup ; rel =prefetch", true, "/images/cat.jpg", "pre
fetch", "", ""}, |
| 55 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", true, "/images/cat.jpg
", "prefetch", "", ""}, | 55 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", true, "/images/cat.jpg
", "prefetch", "", ""}, |
| 56 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false}, | 56 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false}, |
| 57 {"< /images/cat.jpg", false}, | 57 {"< /images/cat.jpg", false}, |
| 58 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", true, "http://wut.com
/", "dns-prefetch", "", ""}, | 58 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", true, "http://wut.com
/ sdfsdf ?sd", "dns-prefetch", "", ""}, |
| 59 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", true, "http://w
ut.com/%20%20%3dsdfsdf?sd", "dns-prefetch", "", ""}, | 59 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", true, "http://w
ut.com/%20%20%3dsdfsdf?sd", "dns-prefetch", "", ""}, |
| 60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", true, "http://wu
t.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""}, | 60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", true, "http://wu
t.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""}, |
| 61 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", true, "http:
//wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""}, | 61 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", true, "http:
//wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", ""}, |
| 62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", true, "http
://wut.com/%20%20%3dsdfsdf?sd", "preload", "image", ""}, | 62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", true, "http
://wut.com/%20%20%3dsdfsdf?sd", "preload", "image", ""}, |
| 63 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", true, "h
ttp://wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", ""}, | 63 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", true, "h
ttp://wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", ""}, |
| 64 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false}, | 64 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false}, |
| 65 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false}, | 65 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false}, |
| 66 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false}, | 66 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false}, |
| 67 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false}, | 67 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false}, |
| 68 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false}, | 68 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false}, |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 const char* url; | 133 const char* url; |
| 134 const char* rel; | 134 const char* rel; |
| 135 bool valid; | 135 bool valid; |
| 136 const char* url2; | 136 const char* url2; |
| 137 const char* rel2; | 137 const char* rel2; |
| 138 bool valid2; | 138 bool valid2; |
| 139 } doubleTestCases[] = { | 139 } doubleTestCases[] = { |
| 140 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", "styl
esheet", true, "simple.css", "stylesheet", true}, | 140 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", "styl
esheet", true, "simple.css", "stylesheet", true}, |
| 141 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "style
sheet", true, "simple.css", "stylesheet", true}, | 141 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "style
sheet", true, "simple.css", "stylesheet", true}, |
| 142 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", "ybg.
css", "stylesheet", true, "simple.css", "stylesheet", true}, | 142 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", "ybg.
css", "stylesheet", true, "simple.css", "stylesheet", true}, |
| 143 {"<hel,lo.css>; rel=stylesheet; title=\"foo,bar\", <simple.css>; rel=stylesh
eet; title=\"foo;bar\"", "hel,lo.css", "stylesheet", true, "simple.css", "styles
heet", true}, |
| 143 }; | 144 }; |
| 144 | 145 |
| 145 void PrintTo(const DoubleTestCase& test, std::ostream* os) | 146 void PrintTo(const DoubleTestCase& test, std::ostream* os) |
| 146 { | 147 { |
| 147 *os << ::testing::PrintToString(test.headerValue); | 148 *os << ::testing::PrintToString(test.headerValue); |
| 148 } | 149 } |
| 149 | 150 |
| 150 class DoubleLinkHeaderTest : public ::testing::TestWithParam<DoubleTestCase> {}; | 151 class DoubleLinkHeaderTest : public ::testing::TestWithParam<DoubleTestCase> {}; |
| 151 | 152 |
| 152 TEST_P(DoubleLinkHeaderTest, Double) | 153 TEST_P(DoubleLinkHeaderTest, Double) |
| (...skipping 10 matching lines...) Expand all Loading... |
| 163 EXPECT_STREQ(testCase.rel2, header2.rel().ascii().data()); | 164 EXPECT_STREQ(testCase.rel2, header2.rel().ascii().data()); |
| 164 EXPECT_EQ(testCase.valid2, header2.valid()); | 165 EXPECT_EQ(testCase.valid2, header2.valid()); |
| 165 } | 166 } |
| 166 | 167 |
| 167 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, DoubleLinkHeaderTest, testing::ValuesIn(
doubleTestCases)); | 168 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, DoubleLinkHeaderTest, testing::ValuesIn(
doubleTestCases)); |
| 168 | 169 |
| 169 struct CrossOriginTestCase { | 170 struct CrossOriginTestCase { |
| 170 const char* headerValue; | 171 const char* headerValue; |
| 171 const char* url; | 172 const char* url; |
| 172 const char* rel; | 173 const char* rel; |
| 173 const CrossOriginAttributeValue crossorigin; | 174 const char* crossorigin; |
| 174 bool valid; | 175 bool valid; |
| 175 } crossOriginTestCases[] = { | 176 } crossOriginTestCases[] = { |
| 176 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "preconnect
", CrossOriginAttributeNotSet, true}, | 177 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "preconnect
", nullptr, true}, |
| 177 {"<http://whatever.com>; rel=preconnect; crossorigin=", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, | 178 {"<http://whatever.com>; rel=preconnect; crossorigin=", "", "", "", false}, |
| 178 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever.com"
, "preconnect", CrossOriginAttributeAnonymous, true}, | 179 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever.com"
, "preconnect", "", true}, |
| 179 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, | 180 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever.com
", "preconnect", "", true}, |
| 180 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, | 181 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever.com
", "preconnect", "", true}, |
| 181 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2.com>
; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnon
ymous, true}, | 182 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2.com>
; rel=preconnect", "http://whatever.com", "preconnect", "", true}, |
| 182 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2.com
>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAno
nymous, true}, | 183 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2.com
>; rel=preconnect", "http://whatever.com", "preconnect", "", true}, |
| 183 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.com>;
rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnony
mous, true}, | 184 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.com>;
rel=preconnect", "http://whatever.com", "preconnect", "", true}, |
| 184 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http://wha
tever.com", "preconnect", CrossOriginAttributeAnonymous, true}, | 185 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http://wha
tever.com", "preconnect", "anonymous", true}, |
| 185 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", "http
://whatever.com", "preconnect", CrossOriginAttributeUseCredentials, true}, | 186 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", "http
://whatever.com", "preconnect", "use-credentials", true}, |
| 186 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http://what
ever.com", "preconnect", CrossOriginAttributeAnonymous, true}, | 187 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http://what
ever.com", "preconnect", "whatever", true}, |
| 187 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http://wha
tever.com", "preconnect", CrossOriginAttributeNotSet, true}, | 188 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http://wha
tever.com", "preconnect", nullptr, true}, |
| 188 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http://wha
tever.com", "preconnect", CrossOriginAttributeNotSet, true}, | 189 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http://wha
tever.com", "preconnect", nullptr, true}, |
| 189 }; | 190 }; |
| 190 | 191 |
| 191 void PrintTo(const CrossOriginTestCase& test, std::ostream* os) | 192 void PrintTo(const CrossOriginTestCase& test, std::ostream* os) |
| 192 { | 193 { |
| 193 *os << ::testing::PrintToString(test.headerValue); | 194 *os << ::testing::PrintToString(test.headerValue); |
| 194 } | 195 } |
| 195 | 196 |
| 196 class CrossOriginLinkHeaderTest : public ::testing::TestWithParam<CrossOriginTes
tCase> {}; | 197 class CrossOriginLinkHeaderTest : public ::testing::TestWithParam<CrossOriginTes
tCase> {}; |
| 197 | 198 |
| 198 TEST_P(CrossOriginLinkHeaderTest, CrossOrigin) | 199 TEST_P(CrossOriginLinkHeaderTest, CrossOrigin) |
| 199 { | 200 { |
| 200 const CrossOriginTestCase testCase = GetParam(); | 201 const CrossOriginTestCase testCase = GetParam(); |
| 201 LinkHeaderSet headerSet(testCase.headerValue); | 202 LinkHeaderSet headerSet(testCase.headerValue); |
| 202 ASSERT_GE(headerSet.size(), 1u); | 203 ASSERT_GE(headerSet.size(), 1u); |
| 203 LinkHeader& header = headerSet[0]; | 204 LinkHeader& header = headerSet[0]; |
| 204 EXPECT_STREQ(testCase.url, header.url().ascii().data()); | 205 EXPECT_STREQ(testCase.url, header.url().ascii().data()); |
| 205 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); | 206 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); |
| 206 EXPECT_EQ(testCase.crossorigin, header.crossOrigin()); | |
| 207 EXPECT_EQ(testCase.valid, header.valid()); | 207 EXPECT_EQ(testCase.valid, header.valid()); |
| 208 if (!testCase.crossorigin) |
| 209 EXPECT_TRUE(header.crossOrigin().isNull()); |
| 210 else |
| 211 EXPECT_STREQ(testCase.crossorigin, header.crossOrigin().ascii().data()); |
| 208 } | 212 } |
| 209 | 213 |
| 210 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu
esIn(crossOriginTestCases)); | 214 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu
esIn(crossOriginTestCases)); |
| 211 | 215 |
| 212 } // namespace | 216 } // namespace |
| 213 } // namespace blink | 217 } // namespace blink |
| OLD | NEW |