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 "core/loader/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; |
16 LinkHeaderSet nullHeaderSet(nullString); | 16 LinkHeaderSet nullHeaderSet(nullString); |
17 ASSERT_EQ(nullHeaderSet.size(), unsigned(0)); | 17 ASSERT_EQ(nullHeaderSet.size(), unsigned(0)); |
18 String emptyString(""); | 18 String emptyString(""); |
19 LinkHeaderSet emptyHeaderSet(emptyString); | 19 LinkHeaderSet emptyHeaderSet(emptyString); |
20 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0)); | 20 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0)); |
21 } | 21 } |
22 | 22 |
23 struct SingleTestCase { | 23 struct SingleTestCase { |
24 const char* headerValue; | 24 const char* headerValue; |
25 bool valid; | 25 bool valid; |
26 const char* url; | 26 const char* url; |
27 const char* rel; | 27 const char* rel; |
28 const char* as; | 28 const char* as; |
| 29 const char* media; |
29 } singleTestCases[] = { | 30 } singleTestCases[] = { |
30 {"</images/cat.jpg>; rel=prefetch", true, "/images/cat.jpg", "prefetch", ""}
, | 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 wutwut> ; rel=prefetch", true, "/images/cat.jpg", "pr
efetch", ""}, | 37 {"</images/cat.jpg wutwut> ; rel=prefetch", true, "/images/cat.jpg", "pr
efetch", "", ""}, |
37 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true, "/images/cat.jpg"
, "prefetch", ""}, | 38 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true, "/images/cat.jpg"
, "prefetch", "", ""}, |
38 {"</images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "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; rel=somethingelse", true, "/images/cat.jp
g", "prefetch", ""}, | 42 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", true, "/images/cat.jp
g", "prefetch", "", ""}, |
42 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch"
, ""}, | 43 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch"
, "", ""}, |
43 {"\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", "", ""}, |
44 {"</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", "", ""}, |
45 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false}, | 46 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false}, |
46 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch", ""
}, | 47 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, |
47 {"<../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", "", ""}, |
48 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch", ""
}, | 49 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch", ""
, ""}, |
49 {"</images/cat.jpg>; rel pel=prefetch", false}, | 50 {"</images/cat.jpg>; rel pel=prefetch", false}, |
50 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", ""}, | 51 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", "", ""}, |
51 {"</images/cat.jpg>; rel =", false}, | 52 {"</images/cat.jpg>; rel =", false}, |
52 {"</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", "", ""}, |
53 {"</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", "", ""}, |
54 {"</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", "", ""}, |
55 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false}, | 56 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false}, |
56 {"< /images/cat.jpg", false}, | 57 {"< /images/cat.jpg", false}, |
57 {"< 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
/", "dns-prefetch", "", ""}, |
58 {"< 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", "", ""}, |
59 {"< 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", "", ""}, |
60 {"< 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", "", ""}, |
61 {"< 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", ""}, |
62 {"< 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", ""}, |
63 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false}, | 64 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false}, |
64 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false}, | 65 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false}, |
65 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false}, | 66 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false}, |
66 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false}, | 67 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false}, |
67 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false}, | 68 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false}, |
68 {"</images/cat.jpg>; rel=prefetch;", true, "/images/cat.jpg", "prefetch", ""
}, | 69 {"</images/cat.jpg>; rel=prefetch;", true, "/images/cat.jpg", "prefetch", ""
, ""}, |
69 {"</images/cat.jpg>; rel=prefetch ;", true, "/images/cat.jpg", "prefetch"
, ""}, | 70 {"</images/cat.jpg>; rel=prefetch ;", true, "/images/cat.jpg", "prefetch"
, "", ""}, |
70 {"</images/ca,t.jpg>; rel=prefetch ;", true, "/images/ca,t.jpg", "prefetc
h", ""}, | 71 {"</images/ca,t.jpg>; rel=prefetch ;", true, "/images/ca,t.jpg", "prefetc
h", "", ""}, |
71 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslash\""
, true, "simple.css", "stylesheet", ""}, | 72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslash\""
, true, "simple.css", "stylesheet", "", ""}, |
72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and backsla
sh: \\\"", false}, | 73 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and backsla
sh: \\\"", false}, |
73 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel=styl
esheet; ", true, "simple.css", "stylesheet", ""}, | 74 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel=styl
esheet; ", true, "simple.css", "stylesheet", "", ""}, |
74 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel=styl
esheet; ", true, "simple.css", "stylesheet", ""}, | 75 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel=styl
esheet; ", true, "simple.css", "stylesheet", "", ""}, |
75 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; rel=st
ylesheet; ", true, "simple.css", "stylesheet", ""}, | 76 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; rel=st
ylesheet; ", true, "simple.css", "stylesheet", "", ""}, |
76 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=styl
esheet; ", true, "simple.css", "stylesheet", ""}, | 77 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=styl
esheet; ", true, "simple.css", "stylesheet", "", ""}, |
77 {"<simple.css>; title=\"\"; rel=stylesheet; ", true, "simple.css", "styleshe
et", ""}, | 78 {"<simple.css>; title=\"\"; rel=stylesheet; ", true, "simple.css", "styleshe
et", "", ""}, |
78 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", true, "simple.css", "styl
esheet", ""}, | 79 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", true, "simple.css", "styl
esheet", "", ""}, |
79 {"<simple.css>; rel=stylesheet; title=\"", false}, | 80 {"<simple.css>; rel=stylesheet; title=\"", false}, |
80 {"<simple.css>; rel=stylesheet; title=\"\"", true, "simple.css", "stylesheet
", ""}, | 81 {"<simple.css>; rel=stylesheet; title=\"\"", true, "simple.css", "stylesheet
", "", ""}, |
81 {"<simple.css>; rel=\"stylesheet\"; title=\"", false}, | 82 {"<simple.css>; rel=\"stylesheet\"; title=\"", false}, |
82 {"<simple.css>; rel=\";style,sheet\"; title=\"", false}, | 83 {"<simple.css>; rel=\";style,sheet\"; title=\"", false}, |
83 {"<simple.css>; rel=\"bla'sdf\"; title=\"", false}, | 84 {"<simple.css>; rel=\"bla'sdf\"; title=\"", false}, |
84 {"<simple.css>; rel=\"\"; title=\"\"", true, "simple.css", "", ""}, | 85 {"<simple.css>; rel=\"\"; title=\"\"", true, "simple.css", "", "", ""}, |
85 {"<simple.css>; rel=''; title=\"\"", true, "simple.css", "", ""}, | 86 {"<simple.css>; rel=''; title=\"\"", true, "simple.css", "", "", ""}, |
86 {"<simple.css>; rel=''; title=", false}, | 87 {"<simple.css>; rel=''; title=", false}, |
87 {"<simple.css>; rel=''; title", false}, | 88 {"<simple.css>; rel=''; title", false}, |
88 {"<simple.css>; rel=''; media", false}, | 89 {"<simple.css>; rel=''; media", false}, |
89 {"<simple.css>; rel=''; hreflang", false}, | 90 {"<simple.css>; rel=''; hreflang", false}, |
90 {"<simple.css>; rel=''; type", false}, | 91 {"<simple.css>; rel=''; type", false}, |
91 {"<simple.css>; rel=''; rev", false}, | 92 {"<simple.css>; rel=''; rev", false}, |
92 {"<simple.css>; rel=''; bla", true, "simple.css", "", ""}, | 93 {"<simple.css>; rel=''; bla", true, "simple.css", "", "", ""}, |
93 {"<simple.css>; rel='prefetch", false}, | 94 {"<simple.css>; rel='prefetch", false}, |
94 {"<simple.css>; rel=\"prefetch", false}, | 95 {"<simple.css>; rel=\"prefetch", false}, |
95 {"<simple.css>; rel=\"", false}, | 96 {"<simple.css>; rel=\"", false}, |
96 {"<http://whatever.com>; rel=preconnect; valid!", true, "http://whatever.com
", "preconnect", ""}, | 97 {"<http://whatever.com>; rel=preconnect; valid!", true, "http://whatever.com
", "preconnect", "", ""}, |
97 {"<http://whatever.com>; rel=preconnect; valid$", true, "http://whatever.com
", "preconnect", ""}, | 98 {"<http://whatever.com>; rel=preconnect; valid$", true, "http://whatever.com
", "preconnect", "", ""}, |
98 {"<http://whatever.com>; rel=preconnect; invalid@", false}, | 99 {"<http://whatever.com>; rel=preconnect; invalid@", false}, |
99 {"<http://whatever.com>; rel=preconnect; invalid*", false}, | 100 {"<http://whatever.com>; rel=preconnect; invalid*", false}, |
| 101 {"</images/cat.jpg>; rel=prefetch;media='(max-width: 5000px)'", true, "/imag
es/cat.jpg", "prefetch", "", "(max-width: 5000px)"}, |
| 102 {"</images/cat.jpg>; rel=prefetch;media=\"(max-width: 5000px)\"", true, "/im
ages/cat.jpg", "prefetch", "", "(max-width: 5000px)"}, |
| 103 {"</images/cat.jpg>; rel=prefetch;media=(max-width:5000px)", true, "/images/
cat.jpg", "prefetch", "", "(max-width:5000px)"}, |
100 }; | 104 }; |
101 | 105 |
102 void PrintTo(const SingleTestCase& test, std::ostream* os) | 106 void PrintTo(const SingleTestCase& test, std::ostream* os) |
103 { | 107 { |
104 *os << ::testing::PrintToString(test.headerValue); | 108 *os << ::testing::PrintToString(test.headerValue); |
105 } | 109 } |
106 | 110 |
107 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {}; | 111 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {}; |
108 | 112 |
109 // Test the cases with a single header | 113 // Test the cases with a single header |
110 TEST_P(SingleLinkHeaderTest, Single) | 114 TEST_P(SingleLinkHeaderTest, Single) |
111 { | 115 { |
112 const SingleTestCase testCase = GetParam(); | 116 const SingleTestCase testCase = GetParam(); |
113 LinkHeaderSet headerSet(testCase.headerValue); | 117 LinkHeaderSet headerSet(testCase.headerValue); |
114 ASSERT_EQ(1u, headerSet.size()); | 118 ASSERT_EQ(1u, headerSet.size()); |
115 LinkHeader& header = headerSet[0]; | 119 LinkHeader& header = headerSet[0]; |
116 EXPECT_EQ(testCase.valid, header.valid()); | 120 EXPECT_EQ(testCase.valid, header.valid()); |
117 if (testCase.valid) { | 121 if (testCase.valid) { |
118 EXPECT_STREQ(testCase.url, header.url().ascii().data()); | 122 EXPECT_STREQ(testCase.url, header.url().ascii().data()); |
119 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); | 123 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); |
120 EXPECT_STREQ(testCase.as, header.as().ascii().data()); | 124 EXPECT_STREQ(testCase.as, header.as().ascii().data()); |
| 125 EXPECT_STREQ(testCase.media, header.media().ascii().data()); |
121 } | 126 } |
122 } | 127 } |
123 | 128 |
124 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn(
singleTestCases)); | 129 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn(
singleTestCases)); |
125 | 130 |
126 struct DoubleTestCase { | 131 struct DoubleTestCase { |
127 const char* headerValue; | 132 const char* headerValue; |
128 const char* url; | 133 const char* url; |
129 const char* rel; | 134 const char* rel; |
130 bool valid; | 135 bool valid; |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 EXPECT_STREQ(testCase.url, header.url().ascii().data()); | 204 EXPECT_STREQ(testCase.url, header.url().ascii().data()); |
200 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); | 205 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); |
201 EXPECT_EQ(testCase.crossorigin, header.crossOrigin()); | 206 EXPECT_EQ(testCase.crossorigin, header.crossOrigin()); |
202 EXPECT_EQ(testCase.valid, header.valid()); | 207 EXPECT_EQ(testCase.valid, header.valid()); |
203 } | 208 } |
204 | 209 |
205 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu
esIn(crossOriginTestCases)); | 210 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu
esIn(crossOriginTestCases)); |
206 | 211 |
207 } // namespace | 212 } // namespace |
208 } // namespace blink | 213 } // namespace blink |
OLD | NEW |