| 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 | 12 |
| 12 TEST(LinkHeaderTest, Empty) | 13 TEST(LinkHeaderTest, Empty) |
| 13 { | 14 { |
| 14 String nullString; | 15 String nullString; |
| 15 LinkHeaderSet nullHeaderSet(nullString); | 16 LinkHeaderSet nullHeaderSet(nullString); |
| 16 ASSERT_EQ(nullHeaderSet.size(), unsigned(0)); | 17 ASSERT_EQ(nullHeaderSet.size(), unsigned(0)); |
| 17 String emptyString(""); | 18 String emptyString(""); |
| 18 LinkHeaderSet emptyHeaderSet(emptyString); | 19 LinkHeaderSet emptyHeaderSet(emptyString); |
| 19 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0)); | 20 ASSERT_EQ(emptyHeaderSet.size(), unsigned(0)); |
| 20 } | 21 } |
| 21 | 22 |
| 22 TEST(LinkHeaderTest, Single) | 23 struct SingleTestCase { |
| 24 const char* headerValue; |
| 25 const char* url; |
| 26 const char* rel; |
| 27 const char* as; |
| 28 bool valid; |
| 29 } singleTestCases[] = { |
| 30 {"</images/cat.jpg>; rel=prefetch", "/images/cat.jpg", "prefetch", "", true}
, |
| 31 {"</images/cat.jpg>;rel=prefetch", "/images/cat.jpg", "prefetch", "", true}, |
| 32 {"</images/cat.jpg> ;rel=prefetch", "/images/cat.jpg", "prefetch", "", tru
e}, |
| 33 {"</images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "",
true}, |
| 34 {"< /images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "",
true}, |
| 35 {"</images/cat.jpg > ; rel=prefetch", "/images/cat.jpg", "prefetch", "",
true}, |
| 36 {"</images/cat.jpg wutwut> ; rel=prefetch", "/images/cat.jpg", "prefetch
", "", true}, |
| 37 {"</images/cat.jpg wutwut \t > ; rel=prefetch", "/images/cat.jpg", "pre
fetch", "", true}, |
| 38 {"</images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr
ue}, |
| 39 {"</images/cat.jpg>; Rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr
ue}, |
| 40 {"</images/cat.jpg>; Rel=PReFetCh ", "/images/cat.jpg", "prefetch", "", tr
ue}, |
| 41 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", "/images/cat.jpg", "p
refetch", "", true}, |
| 42 {" </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "",
true}, |
| 43 {"\t </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", ""
, true}, |
| 44 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", "/images/cat.jpg", "prefetch
", "", true}, |
| 45 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", "", "", "", false}, |
| 46 {"</images/cat.jpg>; rel= prefetch", "/images/cat.jpg", "prefetch", "", true
}, |
| 47 {"<../images/cat.jpg?dog>; rel= prefetch", "../images/cat.jpg?dog", "prefetc
h", "", true}, |
| 48 {"</images/cat.jpg>; rel =prefetch", "/images/cat.jpg", "prefetch", "", true
}, |
| 49 {"</images/cat.jpg>; rel pel=prefetch", "/images/cat.jpg", "", "", false}, |
| 50 {"< /images/cat.jpg>", "/images/cat.jpg", "", "", true}, |
| 51 {"</images/cat.jpg>; rel =", "/images/cat.jpg", "", "", false}, |
| 52 {"</images/cat.jpg>; wut=sup; rel =prefetch", "/images/cat.jpg", "prefetch",
"", true}, |
| 53 {"</images/cat.jpg>; wut=sup ; rel =prefetch", "/images/cat.jpg", "prefetch"
, "", true}, |
| 54 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "pr
efetch", "", true}, |
| 55 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "",
"", false}, |
| 56 {"< /images/cat.jpg", "", "", "", false}, |
| 57 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", "http://wut.com/", "d
ns-prefetch", "", true}, |
| 58 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", "http://wut.com
/%20%20%3dsdfsdf?sd", "dns-prefetch", "", true}, |
| 59 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", "http://wut.com/
dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, |
| 60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", "http://wut.
com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, |
| 61 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", "http://wut
.com/%20%20%3dsdfsdf?sd", "preload", "image", true}, |
| 62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", "http://
wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", true}, |
| 63 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", "/images/cat.jpg", "", "",
false}, |
| 64 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", "/images/cat.jpg", "prefetch
", "", false}, |
| 65 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", "/images/cat.jpg", "", ""
, false}, |
| 66 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", "/images/cat.jpg", "prefet
ch", "", false}, |
| 67 {"</images/cat.jpg>; rel=prefetch;anchor='' ", "/images/cat.jpg", "prefetch"
, "", false}, |
| 68 {"</images/cat.jpg>; rel=prefetch;", "/images/cat.jpg", "prefetch", "", true
}, |
| 69 {"</images/cat.jpg>; rel=prefetch ;", "/images/cat.jpg", "prefetch", "",
true}, |
| 70 {"</images/ca,t.jpg>; rel=prefetch ;", "/images/ca,t.jpg", "prefetch", ""
, true}, |
| 71 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslash\""
, "simple.css", "stylesheet", "", true}, |
| 72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and backsla
sh: \\\"", "simple.css", "stylesheet", "", false}, |
| 73 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel=styl
esheet; ", "simple.css", "stylesheet", "", true}, |
| 74 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel=styl
esheet; ", "simple.css", "stylesheet", "", true}, |
| 75 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; rel=st
ylesheet; ", "simple.css", "stylesheet", "", true}, |
| 76 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=styl
esheet; ", "simple.css", "stylesheet", "", true}, |
| 77 {"<simple.css>; title=\"\"; rel=stylesheet; ", "simple.css", "stylesheet", "
", true}, |
| 78 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", "simple.css", "stylesheet
", "", true}, |
| 79 {"<simple.css>; rel=stylesheet; title=\"", "simple.css", "stylesheet", "", f
alse}, |
| 80 {"<simple.css>; rel=stylesheet; title=\"\"", "simple.css", "stylesheet", "",
true}, |
| 81 {"<simple.css>; rel=\"stylesheet\"; title=\"", "simple.css", "stylesheet", "
", false}, |
| 82 {"<simple.css>; rel=\";style,sheet\"; title=\"", "simple.css", ";style,sheet
", "", false}, |
| 83 {"<simple.css>; rel=\"bla'sdf\"; title=\"", "simple.css", "bla'sdf", "", fal
se}, |
| 84 {"<simple.css>; rel=\"\"; title=\"\"", "simple.css", "", "", true}, |
| 85 {"<simple.css>; rel=''; title=\"\"", "simple.css", "", "", true}, |
| 86 {"<simple.css>; rel=''; title=", "simple.css", "", "", false}, |
| 87 {"<simple.css>; rel=''; title", "simple.css", "", "", false}, |
| 88 {"<simple.css>; rel=''; media", "simple.css", "", "", false}, |
| 89 {"<simple.css>; rel=''; hreflang", "simple.css", "", "", false}, |
| 90 {"<simple.css>; rel=''; type", "simple.css", "", "", false}, |
| 91 {"<simple.css>; rel=''; rev", "simple.css", "", "", false}, |
| 92 {"<simple.css>; rel=''; bla", "simple.css", "", "", true}, |
| 93 {"<simple.css>; rel='prefetch", "simple.css", "", "", false}, |
| 94 {"<simple.css>; rel=\"prefetch", "simple.css", "", "", false}, |
| 95 {"<simple.css>; rel=\"", "simple.css", "", "", false}, |
| 96 }; |
| 97 |
| 98 void PrintTo(const SingleTestCase& test, std::ostream* os) |
| 23 { | 99 { |
| 24 struct TestCase { | 100 *os << ::testing::PrintToString(test.headerValue); |
| 25 const char* headerValue; | |
| 26 const char* url; | |
| 27 const char* rel; | |
| 28 const char* as; | |
| 29 bool valid; | |
| 30 } cases[] = { | |
| 31 {"</images/cat.jpg>; rel=prefetch", "/images/cat.jpg", "prefetch", "", t
rue}, | |
| 32 {"</images/cat.jpg>;rel=prefetch", "/images/cat.jpg", "prefetch", "", tr
ue}, | |
| 33 {"</images/cat.jpg> ;rel=prefetch", "/images/cat.jpg", "prefetch", "",
true}, | |
| 34 {"</images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch",
"", true}, | |
| 35 {"< /images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch",
"", true}, | |
| 36 {"</images/cat.jpg > ; rel=prefetch", "/images/cat.jpg", "prefetch",
"", true}, | |
| 37 {"</images/cat.jpg wutwut> ; rel=prefetch", "/images/cat.jpg", "pref
etch", "", true}, | |
| 38 {"</images/cat.jpg wutwut \t > ; rel=prefetch", "/images/cat.jpg",
"prefetch", "", true}, | |
| 39 {"</images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", ""
, true}, | |
| 40 {"</images/cat.jpg>; Rel=prefetch ", "/images/cat.jpg", "prefetch", ""
, true}, | |
| 41 {"</images/cat.jpg>; Rel=PReFetCh ", "/images/cat.jpg", "prefetch", ""
, true}, | |
| 42 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", "/images/cat.jpg"
, "prefetch", "", true}, | |
| 43 {" </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch",
"", true}, | |
| 44 {"\t </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch"
, "", true}, | |
| 45 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", "/images/cat.jpg", "pref
etch", "", true}, | |
| 46 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", "", "", "", false}, | |
| 47 {"</images/cat.jpg>; rel= prefetch", "/images/cat.jpg", "prefetch", "",
true}, | |
| 48 {"<../images/cat.jpg?dog>; rel= prefetch", "../images/cat.jpg?dog", "pre
fetch", "", true}, | |
| 49 {"</images/cat.jpg>; rel =prefetch", "/images/cat.jpg", "prefetch", "",
true}, | |
| 50 {"</images/cat.jpg>; rel pel=prefetch", "/images/cat.jpg", "", "", false
}, | |
| 51 {"< /images/cat.jpg>", "/images/cat.jpg", "", "", true}, | |
| 52 {"</images/cat.jpg>; rel =", "/images/cat.jpg", "", "", false}, | |
| 53 {"</images/cat.jpg>; wut=sup; rel =prefetch", "/images/cat.jpg", "prefet
ch", "", true}, | |
| 54 {"</images/cat.jpg>; wut=sup ; rel =prefetch", "/images/cat.jpg", "prefe
tch", "", true}, | |
| 55 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", "/images/cat.jpg",
"prefetch", "", true}, | |
| 56 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", "/images/cat.jpg",
"", "", false}, | |
| 57 {"< /images/cat.jpg", "", "", "", false}, | |
| 58 {"< http://wut.com/ sdfsdf ?sd>; rel=dns-prefetch", "http://wut.com/"
, "dns-prefetch", "", true}, | |
| 59 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=dns-prefetch", "http://wut
.com/%20%20%3dsdfsdf?sd", "dns-prefetch", "", true}, | |
| 60 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", "http://wut.
com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, | |
| 61 {"< http://wut.com/dfsdf?sdf=ghj&wer=rty>;;;;; rel=prefetch", "http://
wut.com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, | |
| 62 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=image", "http:/
/wut.com/%20%20%3dsdfsdf?sd", "preload", "image", true}, | |
| 63 {"< http://wut.com/%20%20%3dsdfsdf?sd>; rel=preload;as=whatever", "htt
p://wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", true}, | |
| 64 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", "/images/cat.jpg", "",
"", false}, | |
| 65 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", "/images/cat.jpg", "pref
etch", "", false}, | |
| 66 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", "/images/cat.jpg", ""
, "", false}, | |
| 67 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", "/images/cat.jpg", "pr
efetch", "", false}, | |
| 68 {"</images/cat.jpg>; rel=prefetch;anchor='' ", "/images/cat.jpg", "prefe
tch", "", false}, | |
| 69 {"</images/cat.jpg>; rel=prefetch;", "/images/cat.jpg", "prefetch", "",
true}, | |
| 70 {"</images/cat.jpg>; rel=prefetch ;", "/images/cat.jpg", "prefetch",
"", true}, | |
| 71 {"</images/ca,t.jpg>; rel=prefetch ;", "/images/ca,t.jpg", "prefetch"
, "", true}, | |
| 72 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE and backslas
h\"", "simple.css", "stylesheet", "", true}, | |
| 73 {"<simple.css>; rel=stylesheet; title=\"title with a DQUOTE \\\" and bac
kslash: \\\"", "simple.css", "stylesheet", "", false}, | |
| 74 {"<simple.css>; title=\"title with a DQUOTE \\\" and backslash: \"; rel=
stylesheet; ", "simple.css", "stylesheet", "", true}, | |
| 75 {"<simple.css>; title=\'title with a DQUOTE \\\' and backslash: \'; rel=
stylesheet; ", "simple.css", "stylesheet", "", true}, | |
| 76 {"<simple.css>; title=\"title with a DQUOTE \\\" and ;backslash,: \"; re
l=stylesheet; ", "simple.css", "stylesheet", "", true}, | |
| 77 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=
stylesheet; ", "simple.css", "stylesheet", "", true}, | |
| 78 {"<simple.css>; title=\"\"; rel=stylesheet; ", "simple.css", "stylesheet
", "", true}, | |
| 79 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", "simple.css", "styles
heet", "", true}, | |
| 80 {"<simple.css>; rel=stylesheet; title=\"", "simple.css", "stylesheet", "
", false}, | |
| 81 {"<simple.css>; rel=stylesheet; title=\"\"", "simple.css", "stylesheet",
"", true}, | |
| 82 {"<simple.css>; rel=\"stylesheet\"; title=\"", "simple.css", "stylesheet
", "", false}, | |
| 83 {"<simple.css>; rel=\";style,sheet\"; title=\"", "simple.css", ";style,s
heet", "", false}, | |
| 84 {"<simple.css>; rel=\"bla'sdf\"; title=\"", "simple.css", "bla'sdf", "",
false}, | |
| 85 {"<simple.css>; rel=\"\"; title=\"\"", "simple.css", "", "", true}, | |
| 86 {"<simple.css>; rel=''; title=\"\"", "simple.css", "", "", true}, | |
| 87 {"<simple.css>; rel=''; title=", "simple.css", "", "", false}, | |
| 88 {"<simple.css>; rel=''; title", "simple.css", "", "", false}, | |
| 89 {"<simple.css>; rel=''; media", "simple.css", "", "", false}, | |
| 90 {"<simple.css>; rel=''; hreflang", "simple.css", "", "", false}, | |
| 91 {"<simple.css>; rel=''; type", "simple.css", "", "", false}, | |
| 92 {"<simple.css>; rel=''; rev", "simple.css", "", "", false}, | |
| 93 {"<simple.css>; rel=''; bla", "simple.css", "", "", true}, | |
| 94 {"<simple.css>; rel='prefetch", "simple.css", "", "", false}, | |
| 95 {"<simple.css>; rel=\"prefetch", "simple.css", "", "", false}, | |
| 96 {"<simple.css>; rel=\"", "simple.css", "", "", false}, | |
| 97 }; | |
| 98 | |
| 99 | |
| 100 // Test the cases with a single header | |
| 101 for (auto& testCase : cases) { | |
| 102 LinkHeaderSet headerSet(testCase.headerValue); | |
| 103 LinkHeader& header = headerSet[0]; | |
| 104 ASSERT_STREQ(testCase.url, header.url().ascii().data()); | |
| 105 ASSERT_STREQ(testCase.rel, header.rel().ascii().data()); | |
| 106 ASSERT_EQ(testCase.valid, header.valid()); | |
| 107 } | |
| 108 } | 101 } |
| 109 | 102 |
| 110 TEST(LinkHeaderTest, Double) | 103 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {}; |
| 104 |
| 105 // Test the cases with a single header |
| 106 TEST_P(SingleLinkHeaderTest, Single) |
| 111 { | 107 { |
| 112 struct DoubleTestCase { | 108 const SingleTestCase testCase = GetParam(); |
| 113 const char* headerValue; | 109 LinkHeaderSet headerSet(testCase.headerValue); |
| 114 const char* url; | 110 LinkHeader& header = headerSet[0]; |
| 115 const char* rel; | 111 ASSERT_STREQ(testCase.url, header.url().ascii().data()); |
| 116 bool valid; | 112 ASSERT_STREQ(testCase.rel, header.rel().ascii().data()); |
| 117 const char* url2; | 113 ASSERT_EQ(testCase.valid, header.valid()); |
| 118 const char* rel2; | |
| 119 bool valid2; | |
| 120 } cases[] = { | |
| 121 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", "
stylesheet", true, "simple.css", "stylesheet", true}, | |
| 122 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "s
tylesheet", true, "simple.css", "stylesheet", true}, | |
| 123 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", "
ybg.css", "stylesheet", true, "simple.css", "stylesheet", true}, | |
| 124 }; | |
| 125 | |
| 126 for (auto& testCase : cases) { | |
| 127 LinkHeaderSet headerSet(testCase.headerValue); | |
| 128 LinkHeader& header1 = headerSet[0]; | |
| 129 LinkHeader& header2 = headerSet[1]; | |
| 130 ASSERT_STREQ(testCase.url, header1.url().ascii().data()); | |
| 131 ASSERT_STREQ(testCase.rel, header1.rel().ascii().data()); | |
| 132 ASSERT_EQ(testCase.valid, header1.valid()); | |
| 133 ASSERT_STREQ(testCase.url2, header2.url().ascii().data()); | |
| 134 ASSERT_STREQ(testCase.rel2, header2.rel().ascii().data()); | |
| 135 ASSERT_EQ(testCase.valid2, header2.valid()); | |
| 136 } | |
| 137 } | 114 } |
| 138 | 115 |
| 139 TEST(LinkHeaderTest, CrossOrigin) | 116 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn(
singleTestCases)); |
| 117 |
| 118 struct DoubleTestCase { |
| 119 const char* headerValue; |
| 120 const char* url; |
| 121 const char* rel; |
| 122 bool valid; |
| 123 const char* url2; |
| 124 const char* rel2; |
| 125 bool valid2; |
| 126 } doubleTestCases[] = { |
| 127 {"<ybg.css>; rel=stylesheet, <simple.css>; rel=stylesheet", "ybg.css", "styl
esheet", true, "simple.css", "stylesheet", true}, |
| 128 {"<ybg.css>; rel=stylesheet,<simple.css>; rel=stylesheet", "ybg.css", "style
sheet", true, "simple.css", "stylesheet", true}, |
| 129 {"<ybg.css>; rel=stylesheet;crossorigin,<simple.css>; rel=stylesheet", "ybg.
css", "stylesheet", true, "simple.css", "stylesheet", true}, |
| 130 }; |
| 131 |
| 132 void PrintTo(const DoubleTestCase& test, std::ostream* os) |
| 140 { | 133 { |
| 141 struct TestCase { | 134 *os << ::testing::PrintToString(test.headerValue); |
| 142 const char* headerValue; | 135 } |
| 143 const char* url; | |
| 144 const char* rel; | |
| 145 const CrossOriginAttributeValue crossorigin; | |
| 146 bool valid; | |
| 147 } cases[] = { | |
| 148 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "precon
nect", CrossOriginAttributeNotSet, true}, | |
| 149 {"<http://whatever.com>; rel=preconnect; crossorigin=", "http://whatever
.com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 150 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever.
com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 151 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever
.com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 152 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever
.com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 153 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2.
com>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttribute
Anonymous, true}, | |
| 154 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2
.com>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttribut
eAnonymous, true}, | |
| 155 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.c
om>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeA
nonymous, true}, | |
| 156 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http:/
/whatever.com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 157 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", "
http://whatever.com", "preconnect", CrossOriginAttributeUseCredentials, true}, | |
| 158 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http://
whatever.com", "preconnect", CrossOriginAttributeAnonymous, true}, | |
| 159 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http:/
/whatever.com", "preconnect", CrossOriginAttributeNotSet, true}, | |
| 160 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http:/
/whatever.com", "preconnect", CrossOriginAttributeNotSet, true}, | |
| 161 {"<http://whatever.com>; rel=preconnect; valid!", "http://whatever.com",
"preconnect", CrossOriginAttributeNotSet, true}, | |
| 162 {"<http://whatever.com>; rel=preconnect; valid$", "http://whatever.com",
"preconnect", CrossOriginAttributeNotSet, true}, | |
| 163 {"<http://whatever.com>; rel=preconnect; invalid@", "http://whatever.com
", "preconnect", CrossOriginAttributeNotSet, false}, | |
| 164 {"<http://whatever.com>; rel=preconnect; invalid*", "http://whatever.com
", "preconnect", CrossOriginAttributeNotSet, false}, | |
| 165 }; | |
| 166 | 136 |
| 137 class DoubleLinkHeaderTest : public ::testing::TestWithParam<DoubleTestCase> {}; |
| 167 | 138 |
| 168 // Test the cases with a single header | 139 TEST_P(DoubleLinkHeaderTest, Double) |
| 169 for (auto& testCase : cases) { | 140 { |
| 170 LinkHeaderSet headerSet(testCase.headerValue); | 141 const DoubleTestCase testCase = GetParam(); |
| 171 LinkHeader& header = headerSet[0]; | 142 LinkHeaderSet headerSet(testCase.headerValue); |
| 172 ASSERT_STREQ(testCase.url, header.url().ascii().data()); | 143 LinkHeader& header1 = headerSet[0]; |
| 173 ASSERT_STREQ(testCase.rel, header.rel().ascii().data()); | 144 LinkHeader& header2 = headerSet[1]; |
| 174 ASSERT_EQ(testCase.crossorigin, header.crossOrigin()); | 145 ASSERT_STREQ(testCase.url, header1.url().ascii().data()); |
| 175 ASSERT_EQ(testCase.valid, header.valid()); | 146 ASSERT_STREQ(testCase.rel, header1.rel().ascii().data()); |
| 176 } | 147 ASSERT_EQ(testCase.valid, header1.valid()); |
| 148 ASSERT_STREQ(testCase.url2, header2.url().ascii().data()); |
| 149 ASSERT_STREQ(testCase.rel2, header2.rel().ascii().data()); |
| 150 ASSERT_EQ(testCase.valid2, header2.valid()); |
| 177 } | 151 } |
| 152 |
| 153 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, DoubleLinkHeaderTest, testing::ValuesIn(
doubleTestCases)); |
| 154 |
| 155 struct CrossOriginTestCase { |
| 156 const char* headerValue; |
| 157 const char* url; |
| 158 const char* rel; |
| 159 const CrossOriginAttributeValue crossorigin; |
| 160 bool valid; |
| 161 } crossOriginTestCases[] = { |
| 162 {"<http://whatever.com>; rel=preconnect", "http://whatever.com", "preconnect
", CrossOriginAttributeNotSet, true}, |
| 163 {"<http://whatever.com>; rel=preconnect; crossorigin=", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, |
| 164 {"<http://whatever.com>; rel=preconnect; crossorigin", "http://whatever.com"
, "preconnect", CrossOriginAttributeAnonymous, true}, |
| 165 {"<http://whatever.com>; rel=preconnect; crossorigin ", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, |
| 166 {"<http://whatever.com>; rel=preconnect; crossorigin;", "http://whatever.com
", "preconnect", CrossOriginAttributeAnonymous, true}, |
| 167 {"<http://whatever.com>; rel=preconnect; crossorigin, <http://whatever2.com>
; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnon
ymous, true}, |
| 168 {"<http://whatever.com>; rel=preconnect; crossorigin , <http://whatever2.com
>; rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAno
nymous, true}, |
| 169 {"<http://whatever.com>; rel=preconnect; crossorigin,<http://whatever2.com>;
rel=preconnect", "http://whatever.com", "preconnect", CrossOriginAttributeAnony
mous, true}, |
| 170 {"<http://whatever.com>; rel=preconnect; crossorigin=anonymous", "http://wha
tever.com", "preconnect", CrossOriginAttributeAnonymous, true}, |
| 171 {"<http://whatever.com>; rel=preconnect; crossorigin=use-credentials", "http
://whatever.com", "preconnect", CrossOriginAttributeUseCredentials, true}, |
| 172 {"<http://whatever.com>; rel=preconnect; crossorigin=whatever", "http://what
ever.com", "preconnect", CrossOriginAttributeAnonymous, true}, |
| 173 {"<http://whatever.com>; rel=preconnect; crossorig|in=whatever", "http://wha
tever.com", "preconnect", CrossOriginAttributeNotSet, true}, |
| 174 {"<http://whatever.com>; rel=preconnect; crossorigin|=whatever", "http://wha
tever.com", "preconnect", CrossOriginAttributeNotSet, true}, |
| 175 {"<http://whatever.com>; rel=preconnect; valid!", "http://whatever.com", "pr
econnect", CrossOriginAttributeNotSet, true}, |
| 176 {"<http://whatever.com>; rel=preconnect; valid$", "http://whatever.com", "pr
econnect", CrossOriginAttributeNotSet, true}, |
| 177 {"<http://whatever.com>; rel=preconnect; invalid@", "http://whatever.com", "
preconnect", CrossOriginAttributeNotSet, false}, |
| 178 {"<http://whatever.com>; rel=preconnect; invalid*", "http://whatever.com", "
preconnect", CrossOriginAttributeNotSet, false}, |
| 179 }; |
| 180 |
| 181 void PrintTo(const CrossOriginTestCase& test, std::ostream* os) |
| 182 { |
| 183 *os << ::testing::PrintToString(test.headerValue); |
| 184 } |
| 185 |
| 186 class CrossOriginLinkHeaderTest : public ::testing::TestWithParam<CrossOriginTes
tCase> {}; |
| 187 |
| 188 TEST_P(CrossOriginLinkHeaderTest, CrossOrigin) |
| 189 { |
| 190 const CrossOriginTestCase testCase = GetParam(); |
| 191 LinkHeaderSet headerSet(testCase.headerValue); |
| 192 LinkHeader& header = headerSet[0]; |
| 193 ASSERT_STREQ(testCase.url, header.url().ascii().data()); |
| 194 ASSERT_STREQ(testCase.rel, header.rel().ascii().data()); |
| 195 ASSERT_EQ(testCase.crossorigin, header.crossOrigin()); |
| 196 ASSERT_EQ(testCase.valid, header.valid()); |
| 197 } |
| 198 |
| 199 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu
esIn(crossOriginTestCases)); |
| 200 |
| 201 } // namespace |
| 178 } // namespace blink | 202 } // namespace blink |
| OLD | NEW |