Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(100)

Side by Side Diff: third_party/WebKit/Source/core/loader/LinkHeaderTest.cpp

Issue 1778413005: Don't test implementation details for invalid Link headers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 const char* url; 26 const char* url;
26 const char* rel; 27 const char* rel;
27 const char* as; 28 const char* as;
28 bool valid;
29 } singleTestCases[] = { 29 } singleTestCases[] = {
30 {"</images/cat.jpg>; rel=prefetch", "/images/cat.jpg", "prefetch", "", true} , 30 {"</images/cat.jpg>; rel=prefetch", true, "/images/cat.jpg", "prefetch", ""} ,
31 {"</images/cat.jpg>;rel=prefetch", "/images/cat.jpg", "prefetch", "", true}, 31 {"</images/cat.jpg>;rel=prefetch", true, "/images/cat.jpg", "prefetch", ""},
32 {"</images/cat.jpg> ;rel=prefetch", "/images/cat.jpg", "prefetch", "", tru e}, 32 {"</images/cat.jpg> ;rel=prefetch", true, "/images/cat.jpg", "prefetch", " "},
33 {"</images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true}, 33 {"</images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch" , ""},
34 {"< /images/cat.jpg> ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true}, 34 {"< /images/cat.jpg> ; rel=prefetch", true, "/images/cat.jpg", "prefetch ", ""},
35 {"</images/cat.jpg > ; rel=prefetch", "/images/cat.jpg", "prefetch", "", true}, 35 {"</images/cat.jpg > ; rel=prefetch", true, "/images/cat.jpg", "prefetch ", ""},
36 {"</images/cat.jpg wutwut> ; rel=prefetch", "/images/cat.jpg", "prefetch ", "", true}, 36 {"</images/cat.jpg wutwut> ; rel=prefetch", true, "/images/cat.jpg", "pr efetch", ""},
37 {"</images/cat.jpg wutwut \t > ; rel=prefetch", "/images/cat.jpg", "pre fetch", "", true}, 37 {"</images/cat.jpg wutwut \t > ; rel=prefetch", true, "/images/cat.jpg" , "prefetch", ""},
38 {"</images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr ue}, 38 {"</images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch", ""},
39 {"</images/cat.jpg>; Rel=prefetch ", "/images/cat.jpg", "prefetch", "", tr ue}, 39 {"</images/cat.jpg>; Rel=prefetch ", true, "/images/cat.jpg", "prefetch", ""},
40 {"</images/cat.jpg>; Rel=PReFetCh ", "/images/cat.jpg", "prefetch", "", tr ue}, 40 {"</images/cat.jpg>; Rel=PReFetCh ", true, "/images/cat.jpg", "prefetch", ""},
41 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", "/images/cat.jpg", "p refetch", "", true}, 41 {"</images/cat.jpg>; rel=prefetch; rel=somethingelse", true, "/images/cat.jp g", "prefetch", ""},
42 {" </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "", true}, 42 {" </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetch" , ""},
43 {"\t </images/cat.jpg>; rel=prefetch ", "/images/cat.jpg", "prefetch", "" , true}, 43 {"\t </images/cat.jpg>; rel=prefetch ", true, "/images/cat.jpg", "prefetc h", ""},
44 {"</images/cat.jpg>\t\t ; \trel=prefetch \t ", "/images/cat.jpg", "prefetch ", "", true}, 44 {"</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}, 45 {"\f</images/cat.jpg>\t\t ; \trel=prefetch \t ", false},
46 {"</images/cat.jpg>; rel= prefetch", "/images/cat.jpg", "prefetch", "", true }, 46 {"</images/cat.jpg>; rel= prefetch", true, "/images/cat.jpg", "prefetch", "" },
47 {"<../images/cat.jpg?dog>; rel= prefetch", "../images/cat.jpg?dog", "prefetc h", "", true}, 47 {"<../images/cat.jpg?dog>; rel= prefetch", true, "../images/cat.jpg?dog", "p refetch", ""},
48 {"</images/cat.jpg>; rel =prefetch", "/images/cat.jpg", "prefetch", "", true }, 48 {"</images/cat.jpg>; rel =prefetch", true, "/images/cat.jpg", "prefetch", "" },
49 {"</images/cat.jpg>; rel pel=prefetch", "/images/cat.jpg", "", "", false}, 49 {"</images/cat.jpg>; rel pel=prefetch", false},
50 {"< /images/cat.jpg>", "/images/cat.jpg", "", "", true}, 50 {"< /images/cat.jpg>", true, "/images/cat.jpg", "", ""},
51 {"</images/cat.jpg>; rel =", "/images/cat.jpg", "", "", false}, 51 {"</images/cat.jpg>; rel =", false},
52 {"</images/cat.jpg>; wut=sup; rel =prefetch", "/images/cat.jpg", "prefetch", "", true}, 52 {"</images/cat.jpg>; wut=sup; rel =prefetch", true, "/images/cat.jpg", "pref etch", ""},
53 {"</images/cat.jpg>; wut=sup ; rel =prefetch", "/images/cat.jpg", "prefetch" , "", true}, 53 {"</images/cat.jpg>; wut=sup ; rel =prefetch", true, "/images/cat.jpg", "pre fetch", ""},
54 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "pr efetch", "", true}, 54 {"</images/cat.jpg>; wut=sup ; rel =prefetch \t ;", true, "/images/cat.jpg ", "prefetch", ""},
55 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", "/images/cat.jpg", "", "", false}, 55 {"</images/cat.jpg> wut=sup ; rel =prefetch \t ;", false},
56 {"< /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}, 57 {"< 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", "http://wut.com /%20%20%3dsdfsdf?sd", "dns-prefetch", "", true}, 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/dfsdf?sdf=ghj&wer=rty>; rel=prefetch", "http://wut.com/ dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, 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", "http://wut. com/dfsdf?sdf=ghj&wer=rty", "prefetch", "", true}, 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/%20%20%3dsdfsdf?sd>; rel=preload;as=image", "http://wut .com/%20%20%3dsdfsdf?sd", "preload", "image", true}, 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=whatever", "http:// wut.com/%20%20%3dsdfsdf?sd", "preload", "whatever", true}, 62 {"< 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;", "/images/cat.jpg", "", "", false}, 63 {"</images/cat.jpg>; anchor=foo; rel=prefetch;", false},
64 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", "/images/cat.jpg", "prefetch ", "", false}, 64 {"</images/cat.jpg>; rel=prefetch;anchor=foo ", false},
65 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", "/images/cat.jpg", "", "" , false}, 65 {"</images/cat.jpg>; anchor='foo'; rel=prefetch;", false},
66 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", "/images/cat.jpg", "prefet ch", "", false}, 66 {"</images/cat.jpg>; rel=prefetch;anchor='foo' ", false},
67 {"</images/cat.jpg>; rel=prefetch;anchor='' ", "/images/cat.jpg", "prefetch" , "", false}, 67 {"</images/cat.jpg>; rel=prefetch;anchor='' ", false},
68 {"</images/cat.jpg>; rel=prefetch;", "/images/cat.jpg", "prefetch", "", true }, 68 {"</images/cat.jpg>; rel=prefetch;", true, "/images/cat.jpg", "prefetch", "" },
69 {"</images/cat.jpg>; rel=prefetch ;", "/images/cat.jpg", "prefetch", "", true}, 69 {"</images/cat.jpg>; rel=prefetch ;", true, "/images/cat.jpg", "prefetch" , ""},
70 {"</images/ca,t.jpg>; rel=prefetch ;", "/images/ca,t.jpg", "prefetch", "" , true}, 70 {"</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\"" , "simple.css", "stylesheet", "", true}, 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 backsla sh: \\\"", "simple.css", "stylesheet", "", false}, 72 {"<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; ", "simple.css", "stylesheet", "", true}, 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; ", "simple.css", "stylesheet", "", true}, 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=st ylesheet; ", "simple.css", "stylesheet", "", true}, 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=styl esheet; ", "simple.css", "stylesheet", "", true}, 76 {"<simple.css>; title=\"title with a DQUOTE \' and ;backslash,: \"; rel=styl esheet; ", true, "simple.css", "stylesheet", ""},
77 {"<simple.css>; title=\"\"; rel=stylesheet; ", "simple.css", "stylesheet", " ", true}, 77 {"<simple.css>; title=\"\"; rel=stylesheet; ", true, "simple.css", "styleshe et", ""},
78 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", "simple.css", "stylesheet ", "", true}, 78 {"<simple.css>; title=\"\"; rel=\"stylesheet\"; ", true, "simple.css", "styl esheet", ""},
79 {"<simple.css>; rel=stylesheet; title=\"", "simple.css", "stylesheet", "", f alse}, 79 {"<simple.css>; rel=stylesheet; title=\"", false},
80 {"<simple.css>; rel=stylesheet; title=\"\"", "simple.css", "stylesheet", "", true}, 80 {"<simple.css>; rel=stylesheet; title=\"\"", true, "simple.css", "stylesheet ", ""},
81 {"<simple.css>; rel=\"stylesheet\"; title=\"", "simple.css", "stylesheet", " ", false}, 81 {"<simple.css>; rel=\"stylesheet\"; title=\"", false},
82 {"<simple.css>; rel=\";style,sheet\"; title=\"", "simple.css", ";style,sheet ", "", false}, 82 {"<simple.css>; rel=\";style,sheet\"; title=\"", false},
83 {"<simple.css>; rel=\"bla'sdf\"; title=\"", "simple.css", "bla'sdf", "", fal se}, 83 {"<simple.css>; rel=\"bla'sdf\"; title=\"", false},
84 {"<simple.css>; rel=\"\"; title=\"\"", "simple.css", "", "", true}, 84 {"<simple.css>; rel=\"\"; title=\"\"", true, "simple.css", "", ""},
85 {"<simple.css>; rel=''; title=\"\"", "simple.css", "", "", true}, 85 {"<simple.css>; rel=''; title=\"\"", true, "simple.css", "", ""},
86 {"<simple.css>; rel=''; title=", "simple.css", "", "", false}, 86 {"<simple.css>; rel=''; title=", false},
87 {"<simple.css>; rel=''; title", "simple.css", "", "", false}, 87 {"<simple.css>; rel=''; title", false},
88 {"<simple.css>; rel=''; media", "simple.css", "", "", false}, 88 {"<simple.css>; rel=''; media", false},
89 {"<simple.css>; rel=''; hreflang", "simple.css", "", "", false}, 89 {"<simple.css>; rel=''; hreflang", false},
90 {"<simple.css>; rel=''; type", "simple.css", "", "", false}, 90 {"<simple.css>; rel=''; type", false},
91 {"<simple.css>; rel=''; rev", "simple.css", "", "", false}, 91 {"<simple.css>; rel=''; rev", false},
92 {"<simple.css>; rel=''; bla", "simple.css", "", "", true}, 92 {"<simple.css>; rel=''; bla", true, "simple.css", "", ""},
93 {"<simple.css>; rel='prefetch", "simple.css", "", "", false}, 93 {"<simple.css>; rel='prefetch", false},
94 {"<simple.css>; rel=\"prefetch", "simple.css", "", "", false}, 94 {"<simple.css>; rel=\"prefetch", false},
95 {"<simple.css>; rel=\"", "simple.css", "", "", false}, 95 {"<simple.css>; rel=\"", false},
96 {"<http://whatever.com>; rel=preconnect; valid!", "http://whatever.com", "pr econnect", "", true}, 96 {"<http://whatever.com>; rel=preconnect; valid!", true, "http://whatever.com ", "preconnect", ""},
97 {"<http://whatever.com>; rel=preconnect; valid$", "http://whatever.com", "pr econnect", "", true}, 97 {"<http://whatever.com>; rel=preconnect; valid$", true, "http://whatever.com ", "preconnect", ""},
98 {"<http://whatever.com>; rel=preconnect; invalid@", "http://whatever.com", " preconnect", "", false}, 98 {"<http://whatever.com>; rel=preconnect; invalid@", false},
99 {"<http://whatever.com>; rel=preconnect; invalid*", "http://whatever.com", " preconnect", "", false}, 99 {"<http://whatever.com>; rel=preconnect; invalid*", false},
100 }; 100 };
101 101
102 void PrintTo(const SingleTestCase& test, std::ostream* os) 102 void PrintTo(const SingleTestCase& test, std::ostream* os)
103 { 103 {
104 *os << ::testing::PrintToString(test.headerValue); 104 *os << ::testing::PrintToString(test.headerValue);
105 } 105 }
106 106
107 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {}; 107 class SingleLinkHeaderTest : public ::testing::TestWithParam<SingleTestCase> {};
108 108
109 // Test the cases with a single header 109 // Test the cases with a single header
110 TEST_P(SingleLinkHeaderTest, Single) 110 TEST_P(SingleLinkHeaderTest, Single)
111 { 111 {
112 const SingleTestCase testCase = GetParam(); 112 const SingleTestCase testCase = GetParam();
113 LinkHeaderSet headerSet(testCase.headerValue); 113 LinkHeaderSet headerSet(testCase.headerValue);
114 ASSERT_EQ(1u, headerSet.size()); 114 ASSERT_EQ(1u, headerSet.size());
115 LinkHeader& header = headerSet[0]; 115 LinkHeader& header = headerSet[0];
116 EXPECT_STREQ(testCase.url, header.url().ascii().data());
117 EXPECT_STREQ(testCase.rel, header.rel().ascii().data());
118 EXPECT_EQ(testCase.valid, header.valid()); 116 EXPECT_EQ(testCase.valid, header.valid());
117 if (testCase.valid) {
118 EXPECT_STREQ(testCase.url, header.url().ascii().data());
119 EXPECT_STREQ(testCase.rel, header.rel().ascii().data());
120 EXPECT_STREQ(testCase.as, header.as().ascii().data());
121 }
119 } 122 }
120 123
121 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn( singleTestCases)); 124 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, SingleLinkHeaderTest, testing::ValuesIn( singleTestCases));
122 125
123 struct DoubleTestCase { 126 struct DoubleTestCase {
124 const char* headerValue; 127 const char* headerValue;
125 const char* url; 128 const char* url;
126 const char* rel; 129 const char* rel;
127 bool valid; 130 bool valid;
128 const char* url2; 131 const char* url2;
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 EXPECT_STREQ(testCase.url, header.url().ascii().data()); 199 EXPECT_STREQ(testCase.url, header.url().ascii().data());
197 EXPECT_STREQ(testCase.rel, header.rel().ascii().data()); 200 EXPECT_STREQ(testCase.rel, header.rel().ascii().data());
198 EXPECT_EQ(testCase.crossorigin, header.crossOrigin()); 201 EXPECT_EQ(testCase.crossorigin, header.crossOrigin());
199 EXPECT_EQ(testCase.valid, header.valid()); 202 EXPECT_EQ(testCase.valid, header.valid());
200 } 203 }
201 204
202 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu esIn(crossOriginTestCases)); 205 INSTANTIATE_TEST_CASE_P(LinkHeaderTest, CrossOriginLinkHeaderTest, testing::Valu esIn(crossOriginTestCases));
203 206
204 } // namespace 207 } // namespace
205 } // namespace blink 208 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698