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 |