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

Side by Side Diff: content/browser/appcache/manifest_parser_unittest.cc

Issue 276093003: appcache content-type check (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <string> 5 #include <string>
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "url/gurl.h" 8 #include "url/gurl.h"
9 #include "webkit/browser/appcache/manifest_parser.h" 9 #include "webkit/browser/appcache/manifest_parser.h"
10 10
11 using appcache::Manifest; 11 using appcache::Manifest;
12 using appcache::NamespaceVector; 12 using appcache::NamespaceVector;
13 using appcache::FALLBACK_NAMESPACE; 13 using appcache::FALLBACK_NAMESPACE;
14 using appcache::INTERCEPT_NAMESPACE; 14 using appcache::INTERCEPT_NAMESPACE;
15 using appcache::NETWORK_NAMESPACE; 15 using appcache::NETWORK_NAMESPACE;
16 using appcache::PARSE_MANIFEST_ALLOWING_INTERCEPTS;
17 using appcache::PARSE_MANIFEST_PER_STANDARD;
16 18
17 namespace content { 19 namespace content {
18 20
19 class AppCacheManifestParserTest : public testing::Test { 21 class AppCacheManifestParserTest : public testing::Test {
20 }; 22 };
21 23
22 TEST(AppCacheManifestParserTest, NoData) { 24 TEST(AppCacheManifestParserTest, NoData) {
23 GURL url; 25 GURL url;
24 Manifest manifest; 26 Manifest manifest;
25 EXPECT_FALSE(ParseManifest(url, "", 0, manifest)); 27 EXPECT_FALSE(ParseManifest(url, "", 0,
26 EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, manifest)); // 0 len 28 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
29 EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, // Len is 0.
30 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
27 } 31 }
28 32
29 TEST(AppCacheManifestParserTest, CheckSignature) { 33 TEST(AppCacheManifestParserTest, CheckSignature) {
30 GURL url; 34 GURL url;
31 Manifest manifest; 35 Manifest manifest;
32 36
33 const std::string kBadSignatures[] = { 37 const std::string kBadSignatures[] = {
34 "foo", 38 "foo",
35 "CACHE MANIFEST;V2\r", // not followed by whitespace 39 "CACHE MANIFEST;V2\r", // not followed by whitespace
36 "CACHE MANIFEST#bad\r", // no whitespace before comment 40 "CACHE MANIFEST#bad\r", // no whitespace before comment
37 "cache manifest ", // wrong case 41 "cache manifest ", // wrong case
38 "#CACHE MANIFEST\r", // comment 42 "#CACHE MANIFEST\r", // comment
39 "xCACHE MANIFEST\n", // bad first char 43 "xCACHE MANIFEST\n", // bad first char
40 " CACHE MANIFEST\r", // begins with whitespace 44 " CACHE MANIFEST\r", // begins with whitespace
41 "\xEF\xBE\xBF" "CACHE MANIFEST\r", // bad UTF-8 BOM value 45 "\xEF\xBE\xBF" "CACHE MANIFEST\r", // bad UTF-8 BOM value
42 }; 46 };
43 47
44 for (size_t i = 0; i < arraysize(kBadSignatures); ++i) { 48 for (size_t i = 0; i < arraysize(kBadSignatures); ++i) {
45 const std::string bad = kBadSignatures[i]; 49 const std::string bad = kBadSignatures[i];
46 EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(), manifest)); 50 EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(),
51 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
47 } 52 }
48 53
49 const std::string kGoodSignatures[] = { 54 const std::string kGoodSignatures[] = {
50 "CACHE MANIFEST", 55 "CACHE MANIFEST",
51 "CACHE MANIFEST ", 56 "CACHE MANIFEST ",
52 "CACHE MANIFEST\r", 57 "CACHE MANIFEST\r",
53 "CACHE MANIFEST\n", 58 "CACHE MANIFEST\n",
54 "CACHE MANIFEST\r\n", 59 "CACHE MANIFEST\r\n",
55 "CACHE MANIFEST\t# ignore me\r", 60 "CACHE MANIFEST\t# ignore me\r",
56 "CACHE MANIFEST ignore\r\n", 61 "CACHE MANIFEST ignore\r\n",
57 "CHROMIUM CACHE MANIFEST\r\n", 62 "CHROMIUM CACHE MANIFEST\r\n",
58 "\xEF\xBB\xBF" "CACHE MANIFEST \r\n", // BOM present 63 "\xEF\xBB\xBF" "CACHE MANIFEST \r\n", // BOM present
59 }; 64 };
60 65
61 for (size_t i = 0; i < arraysize(kGoodSignatures); ++i) { 66 for (size_t i = 0; i < arraysize(kGoodSignatures); ++i) {
62 const std::string good = kGoodSignatures[i]; 67 const std::string good = kGoodSignatures[i];
63 EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(), manifest)); 68 EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(),
69 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
64 } 70 }
65 } 71 }
66 72
67 TEST(AppCacheManifestParserTest, NoManifestUrl) { 73 TEST(AppCacheManifestParserTest, NoManifestUrl) {
68 Manifest manifest; 74 Manifest manifest;
69 const std::string kData("CACHE MANIFEST\r" 75 const std::string kData("CACHE MANIFEST\r"
70 "relative/tobase.com\r" 76 "relative/tobase.com\r"
71 "http://absolute.com/addme.com"); 77 "http://absolute.com/addme.com");
72 const GURL kUrl; 78 const GURL kUrl;
73 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 79 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
80 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
74 EXPECT_TRUE(manifest.explicit_urls.empty()); 81 EXPECT_TRUE(manifest.explicit_urls.empty());
75 EXPECT_TRUE(manifest.fallback_namespaces.empty()); 82 EXPECT_TRUE(manifest.fallback_namespaces.empty());
76 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 83 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
77 EXPECT_FALSE(manifest.online_whitelist_all); 84 EXPECT_FALSE(manifest.online_whitelist_all);
78 } 85 }
79 86
80 TEST(AppCacheManifestParserTest, ExplicitUrls) { 87 TEST(AppCacheManifestParserTest, ExplicitUrls) {
81 Manifest manifest; 88 Manifest manifest;
82 const GURL kUrl("http://www.foo.com"); 89 const GURL kUrl("http://www.foo.com");
83 const std::string kData("CACHE MANIFEST\r" 90 const std::string kData("CACHE MANIFEST\r"
84 "relative/one\r" 91 "relative/one\r"
85 "# some comment\r" 92 "# some comment\r"
86 "http://www.foo.com/two#strip\r\n" 93 "http://www.foo.com/two#strip\r\n"
87 "NETWORK:\r" 94 "NETWORK:\r"
88 " \t CACHE:\r" 95 " \t CACHE:\r"
89 "HTTP://www.diff.com/three\r" 96 "HTTP://www.diff.com/three\r"
90 "FALLBACK:\r" 97 "FALLBACK:\r"
91 " \t # another comment with leading whitespace\n" 98 " \t # another comment with leading whitespace\n"
92 "IGNORE:\r" 99 "IGNORE:\r"
93 "http://www.foo.com/ignore\r" 100 "http://www.foo.com/ignore\r"
94 "CACHE: \r" 101 "CACHE: \r"
95 "garbage:#!@\r" 102 "garbage:#!@\r"
96 "https://www.foo.com/diffscheme \t \r" 103 "https://www.foo.com/diffscheme \t \r"
97 " \t relative/four#stripme\n\r" 104 " \t relative/four#stripme\n\r"
98 "*\r"); 105 "*\r");
99 106
100 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 107 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
108 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
101 EXPECT_TRUE(manifest.fallback_namespaces.empty()); 109 EXPECT_TRUE(manifest.fallback_namespaces.empty());
102 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 110 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
103 EXPECT_FALSE(manifest.online_whitelist_all); 111 EXPECT_FALSE(manifest.online_whitelist_all);
104 112
105 base::hash_set<std::string> urls = manifest.explicit_urls; 113 base::hash_set<std::string> urls = manifest.explicit_urls;
106 const size_t kExpected = 5; 114 const size_t kExpected = 5;
107 ASSERT_EQ(kExpected, urls.size()); 115 ASSERT_EQ(kExpected, urls.size());
108 EXPECT_TRUE(urls.find("http://www.foo.com/relative/one") != urls.end()); 116 EXPECT_TRUE(urls.find("http://www.foo.com/relative/one") != urls.end());
109 EXPECT_TRUE(urls.find("http://www.foo.com/two") != urls.end()); 117 EXPECT_TRUE(urls.find("http://www.foo.com/two") != urls.end());
110 EXPECT_TRUE(urls.find("http://www.diff.com/three") != urls.end()); 118 EXPECT_TRUE(urls.find("http://www.diff.com/three") != urls.end());
111 EXPECT_TRUE(urls.find("http://www.foo.com/relative/four") != urls.end()); 119 EXPECT_TRUE(urls.find("http://www.foo.com/relative/four") != urls.end());
112 120
113 // Wildcard is treated as a relative URL in explicit section. 121 // Wildcard is treated as a relative URL in explicit section.
114 EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end()); 122 EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
123
124 // We should get the same results with intercepts disallowed.
125 manifest = Manifest();
126 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
127 PARSE_MANIFEST_PER_STANDARD, manifest));
128 EXPECT_TRUE(manifest.fallback_namespaces.empty());
129 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
130 EXPECT_FALSE(manifest.online_whitelist_all);
131
132 urls = manifest.explicit_urls;
133 ASSERT_EQ(kExpected, urls.size());
134 EXPECT_TRUE(urls.find("http://www.foo.com/relative/one") != urls.end());
135 EXPECT_TRUE(urls.find("http://www.foo.com/two") != urls.end());
136 EXPECT_TRUE(urls.find("http://www.diff.com/three") != urls.end());
137 EXPECT_TRUE(urls.find("http://www.foo.com/relative/four") != urls.end());
138
139 // Wildcard is treated as a relative URL in explicit section.
140 EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
115 } 141 }
116 142
117 TEST(AppCacheManifestParserTest, WhitelistUrls) { 143 TEST(AppCacheManifestParserTest, WhitelistUrls) {
118 Manifest manifest; 144 Manifest manifest;
119 const GURL kUrl("http://www.bar.com"); 145 const GURL kUrl("http://www.bar.com");
120 const std::string kData("CACHE MANIFEST\r" 146 const std::string kData("CACHE MANIFEST\r"
121 "NETWORK:\r" 147 "NETWORK:\r"
122 "relative/one\r" 148 "relative/one\r"
123 "# a comment\r" 149 "# a comment\r"
124 "http://www.bar.com/two\r" 150 "http://www.bar.com/two\r"
125 "HTTP://www.diff.com/three#strip\n\r" 151 "HTTP://www.diff.com/three#strip\n\r"
126 "FALLBACK:\r" 152 "FALLBACK:\r"
127 "garbage\r" 153 "garbage\r"
128 "UNKNOWN:\r" 154 "UNKNOWN:\r"
129 "http://www.bar.com/ignore\r" 155 "http://www.bar.com/ignore\r"
130 "CACHE:\r" 156 "CACHE:\r"
131 "NETWORK:\r" 157 "NETWORK:\r"
132 "https://www.wrongscheme.com\n" 158 "https://www.wrongscheme.com\n"
133 "relative/four#stripref \t \r" 159 "relative/four#stripref \t \r"
134 "http://www.five.com\r\n" 160 "http://www.five.com\r\n"
135 "*foo\r"); 161 "*foo\r");
136 162
137 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 163 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
164 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
138 EXPECT_TRUE(manifest.explicit_urls.empty()); 165 EXPECT_TRUE(manifest.explicit_urls.empty());
139 EXPECT_TRUE(manifest.fallback_namespaces.empty()); 166 EXPECT_TRUE(manifest.fallback_namespaces.empty());
140 EXPECT_TRUE(manifest.intercept_namespaces.empty()); 167 EXPECT_TRUE(manifest.intercept_namespaces.empty());
141 EXPECT_FALSE(manifest.online_whitelist_all); 168 EXPECT_FALSE(manifest.online_whitelist_all);
142 169
143 const NamespaceVector& online = manifest.online_whitelist_namespaces; 170 const NamespaceVector& online = manifest.online_whitelist_namespaces;
144 const size_t kExpected = 6; 171 const size_t kExpected = 6;
145 ASSERT_EQ(kExpected, online.size()); 172 ASSERT_EQ(kExpected, online.size());
146 EXPECT_EQ(NETWORK_NAMESPACE, online[0].type); 173 EXPECT_EQ(NETWORK_NAMESPACE, online[0].type);
147 EXPECT_FALSE(online[0].is_pattern); 174 EXPECT_FALSE(online[0].is_pattern);
(...skipping 25 matching lines...) Expand all
173 "http://diff.com/ignore http://glorp.com/wronghost\r" 200 "http://diff.com/ignore http://glorp.com/wronghost\r"
174 "http://glorp.com/wronghost http://diff.com/ohwell\r" 201 "http://glorp.com/wronghost http://diff.com/ohwell\r"
175 "relative/badscheme ftp://glorp.com/ignored\r" 202 "relative/badscheme ftp://glorp.com/ignored\r"
176 "garbage\r\n" 203 "garbage\r\n"
177 "CACHE:\r" 204 "CACHE:\r"
178 "# only fallback urls in this test\r" 205 "# only fallback urls in this test\r"
179 "FALLBACK:\n" 206 "FALLBACK:\n"
180 "relative/four#strip relative/fourfb#strip\r" 207 "relative/four#strip relative/fourfb#strip\r"
181 "http://www.glorp.com/notsame relative/skipped\r"); 208 "http://www.glorp.com/notsame relative/skipped\r");
182 209
183 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 210 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
211 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
184 EXPECT_TRUE(manifest.explicit_urls.empty()); 212 EXPECT_TRUE(manifest.explicit_urls.empty());
185 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 213 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
186 EXPECT_FALSE(manifest.online_whitelist_all); 214 EXPECT_FALSE(manifest.online_whitelist_all);
187 215
188 const NamespaceVector& fallbacks = manifest.fallback_namespaces; 216 const NamespaceVector& fallbacks = manifest.fallback_namespaces;
189 const size_t kExpected = 5; 217 const size_t kExpected = 5;
190 ASSERT_EQ(kExpected, fallbacks.size()); 218 ASSERT_EQ(kExpected, fallbacks.size());
191 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[0].type); 219 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[0].type);
192 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[1].type); 220 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[1].type);
193 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[2].type); 221 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[2].type);
(...skipping 29 matching lines...) Expand all
223 const std::string kData("CACHE MANIFEST\r" 251 const std::string kData("CACHE MANIFEST\r"
224 "FALLBACK:\r" 252 "FALLBACK:\r"
225 "http://www.portme.com:1234/one relative/onefb\r" 253 "http://www.portme.com:1234/one relative/onefb\r"
226 "HTTP://www.portme.com:9876/wrong http://www.portme.com:1234/ignore\r" 254 "HTTP://www.portme.com:9876/wrong http://www.portme.com:1234/ignore\r"
227 "http://www.portme.com:1234/stillwrong http://www.portme.com:42/boo\r" 255 "http://www.portme.com:1234/stillwrong http://www.portme.com:42/boo\r"
228 "relative/two relative/twofb\r" 256 "relative/two relative/twofb\r"
229 "http://www.portme.com:1234/three HTTP://www.portme.com:1234/threefb\r" 257 "http://www.portme.com:1234/three HTTP://www.portme.com:1234/threefb\r"
230 "http://www.portme.com/noport http://www.portme.com:1234/skipped\r" 258 "http://www.portme.com/noport http://www.portme.com:1234/skipped\r"
231 "http://www.portme.com:1234/skipme http://www.portme.com/noport\r"); 259 "http://www.portme.com:1234/skipme http://www.portme.com/noport\r");
232 260
233 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 261 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
262 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
234 EXPECT_TRUE(manifest.explicit_urls.empty()); 263 EXPECT_TRUE(manifest.explicit_urls.empty());
235 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 264 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
236 EXPECT_FALSE(manifest.online_whitelist_all); 265 EXPECT_FALSE(manifest.online_whitelist_all);
237 266
238 const NamespaceVector& fallbacks = manifest.fallback_namespaces; 267 const NamespaceVector& fallbacks = manifest.fallback_namespaces;
239 const size_t kExpected = 3; 268 const size_t kExpected = 3;
240 ASSERT_EQ(kExpected, fallbacks.size()); 269 ASSERT_EQ(kExpected, fallbacks.size());
241 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[0].type); 270 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[0].type);
242 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[1].type); 271 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[1].type);
243 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[2].type); 272 EXPECT_EQ(FALLBACK_NAMESPACE, fallbacks[2].type);
(...skipping 21 matching lines...) Expand all
265 "http://www.portme.com:1234/one return relative/int1\r" 294 "http://www.portme.com:1234/one return relative/int1\r"
266 "HTTP://www.portme.com:9/wrong return http://www.portme.com:1234/ignore\r" 295 "HTTP://www.portme.com:9/wrong return http://www.portme.com:1234/ignore\r"
267 "http://www.portme.com:1234/wrong return http://www.portme.com:9/boo\r" 296 "http://www.portme.com:1234/wrong return http://www.portme.com:9/boo\r"
268 "relative/two return relative/int2\r" 297 "relative/two return relative/int2\r"
269 "relative/three wrong relative/threefb\r" 298 "relative/three wrong relative/threefb\r"
270 "http://www.portme.com:1234/three return HTTP://www.portme.com:1234/int3\r" 299 "http://www.portme.com:1234/three return HTTP://www.portme.com:1234/int3\r"
271 "http://www.portme.com/noport return http://www.portme.com:1234/skipped\r" 300 "http://www.portme.com/noport return http://www.portme.com:1234/skipped\r"
272 "http://www.portme.com:1234/skipme return http://www.portme.com/noport\r" 301 "http://www.portme.com:1234/skipme return http://www.portme.com/noport\r"
273 "relative/wrong/again missing/intercept_type\r"); 302 "relative/wrong/again missing/intercept_type\r");
274 303
275 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 304 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
305 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
276 EXPECT_TRUE(manifest.fallback_namespaces.empty()); 306 EXPECT_TRUE(manifest.fallback_namespaces.empty());
277 EXPECT_TRUE(manifest.explicit_urls.empty()); 307 EXPECT_TRUE(manifest.explicit_urls.empty());
278 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 308 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
279 EXPECT_FALSE(manifest.online_whitelist_all); 309 EXPECT_FALSE(manifest.online_whitelist_all);
280 310
281 const NamespaceVector& intercepts = manifest.intercept_namespaces; 311 const NamespaceVector& intercepts = manifest.intercept_namespaces;
282 const size_t kExpected = 3; 312 const size_t kExpected = 3;
283 ASSERT_EQ(kExpected, intercepts.size()); 313 ASSERT_EQ(kExpected, intercepts.size());
284 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[0].type); 314 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[0].type);
285 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[1].type); 315 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[1].type);
286 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[2].type); 316 EXPECT_EQ(INTERCEPT_NAMESPACE, intercepts[2].type);
287 EXPECT_EQ(GURL("http://www.portme.com:1234/one"), 317 EXPECT_EQ(GURL("http://www.portme.com:1234/one"),
288 intercepts[0].namespace_url); 318 intercepts[0].namespace_url);
289 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/int1"), 319 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/int1"),
290 intercepts[0].target_url); 320 intercepts[0].target_url);
291 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/two"), 321 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/two"),
292 intercepts[1].namespace_url); 322 intercepts[1].namespace_url);
293 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/int2"), 323 EXPECT_EQ(GURL("http://www.portme.com:1234/relative/int2"),
294 intercepts[1].target_url); 324 intercepts[1].target_url);
295 EXPECT_EQ(GURL("http://www.portme.com:1234/three"), 325 EXPECT_EQ(GURL("http://www.portme.com:1234/three"),
296 intercepts[2].namespace_url); 326 intercepts[2].namespace_url);
297 EXPECT_EQ(GURL("http://www.portme.com:1234/int3"), 327 EXPECT_EQ(GURL("http://www.portme.com:1234/int3"),
298 intercepts[2].target_url); 328 intercepts[2].target_url);
329
330 // Disallow intercepts ths time.
331 manifest = Manifest();
332 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
333 PARSE_MANIFEST_PER_STANDARD, manifest));
334 EXPECT_TRUE(manifest.fallback_namespaces.empty());
335 EXPECT_TRUE(manifest.explicit_urls.empty());
336 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
337 EXPECT_TRUE(manifest.intercept_namespaces.empty());
338 EXPECT_FALSE(manifest.online_whitelist_all);
299 } 339 }
300 340
301 TEST(AppCacheManifestParserTest, ComboUrls) { 341 TEST(AppCacheManifestParserTest, ComboUrls) {
302 Manifest manifest; 342 Manifest manifest;
303 const GURL kUrl("http://combo.com:42"); 343 const GURL kUrl("http://combo.com:42");
304 const std::string kData("CACHE MANIFEST\r" 344 const std::string kData("CACHE MANIFEST\r"
305 "relative/explicit-1\r" 345 "relative/explicit-1\r"
306 "# some comment\r" 346 "# some comment\r"
307 "http://combo.com:99/explicit-2#strip\r" 347 "http://combo.com:99/explicit-2#strip\r"
308 "NETWORK:\r" 348 "NETWORK:\r"
309 "http://combo.com/whitelist-1\r" 349 "http://combo.com/whitelist-1\r"
310 "HTTP://www.diff.com/whitelist-2#strip\r" 350 "HTTP://www.diff.com/whitelist-2#strip\r"
311 "*\r" 351 "*\r"
312 "CACHE:\n\r" 352 "CACHE:\n\r"
313 "http://www.diff.com/explicit-3\r" 353 "http://www.diff.com/explicit-3\r"
314 "FALLBACK:\r" 354 "FALLBACK:\r"
315 "http://combo.com:42/fallback-1 http://combo.com:42/fallback-1b\r" 355 "http://combo.com:42/fallback-1 http://combo.com:42/fallback-1b\r"
316 "relative/fallback-2 relative/fallback-2b\r" 356 "relative/fallback-2 relative/fallback-2b\r"
317 "UNKNOWN:\r\n" 357 "UNKNOWN:\r\n"
318 "http://combo.com/ignoreme\r" 358 "http://combo.com/ignoreme\r"
319 "relative/still-ignored\r" 359 "relative/still-ignored\r"
320 "NETWORK:\r\n" 360 "NETWORK:\r\n"
321 "relative/whitelist-3#strip\r" 361 "relative/whitelist-3#strip\r"
322 "http://combo.com:99/whitelist-4\r"); 362 "http://combo.com:99/whitelist-4\r");
323 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 363 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
364 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
324 EXPECT_TRUE(manifest.online_whitelist_all); 365 EXPECT_TRUE(manifest.online_whitelist_all);
325 366
326 base::hash_set<std::string> urls = manifest.explicit_urls; 367 base::hash_set<std::string> urls = manifest.explicit_urls;
327 size_t expected = 3; 368 size_t expected = 3;
328 ASSERT_EQ(expected, urls.size()); 369 ASSERT_EQ(expected, urls.size());
329 EXPECT_TRUE(urls.find("http://combo.com:42/relative/explicit-1") != 370 EXPECT_TRUE(urls.find("http://combo.com:42/relative/explicit-1") !=
330 urls.end()); 371 urls.end());
331 EXPECT_TRUE(urls.find("http://combo.com:99/explicit-2") != urls.end()); 372 EXPECT_TRUE(urls.find("http://combo.com:99/explicit-2") != urls.end());
332 EXPECT_TRUE(urls.find("http://www.diff.com/explicit-3") != urls.end()); 373 EXPECT_TRUE(urls.find("http://www.diff.com/explicit-3") != urls.end());
333 374
(...skipping 25 matching lines...) Expand all
359 400
360 EXPECT_TRUE(manifest.intercept_namespaces.empty()); 401 EXPECT_TRUE(manifest.intercept_namespaces.empty());
361 } 402 }
362 403
363 TEST(AppCacheManifestParserTest, UnusualUtf8) { 404 TEST(AppCacheManifestParserTest, UnusualUtf8) {
364 Manifest manifest; 405 Manifest manifest;
365 const GURL kUrl("http://bad.com"); 406 const GURL kUrl("http://bad.com");
366 const std::string kData("CACHE MANIFEST\r" 407 const std::string kData("CACHE MANIFEST\r"
367 "\xC0" "invalidutf8\r" 408 "\xC0" "invalidutf8\r"
368 "nonbmp" "\xF1\x84\xAB\xBC\r"); 409 "nonbmp" "\xF1\x84\xAB\xBC\r");
369 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 410 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
370 411 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
371 base::hash_set<std::string> urls = manifest.explicit_urls; 412 base::hash_set<std::string> urls = manifest.explicit_urls;
372 EXPECT_TRUE(urls.find("http://bad.com/%EF%BF%BDinvalidutf8") != urls.end()); 413 EXPECT_TRUE(urls.find("http://bad.com/%EF%BF%BDinvalidutf8") != urls.end());
373 EXPECT_TRUE(urls.find("http://bad.com/nonbmp%F1%84%AB%BC") != urls.end()); 414 EXPECT_TRUE(urls.find("http://bad.com/nonbmp%F1%84%AB%BC") != urls.end());
374 } 415 }
375 416
376 TEST(AppCacheManifestParserTest, IgnoreAfterSpace) { 417 TEST(AppCacheManifestParserTest, IgnoreAfterSpace) {
377 Manifest manifest; 418 Manifest manifest;
378 const GURL kUrl("http://smorg.borg"); 419 const GURL kUrl("http://smorg.borg");
379 const std::string kData( 420 const std::string kData(
380 "CACHE MANIFEST\r" 421 "CACHE MANIFEST\r"
381 "resource.txt this stuff after the white space should be ignored\r"); 422 "resource.txt this stuff after the white space should be ignored\r");
382 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 423 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
424 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
383 425
384 base::hash_set<std::string> urls = manifest.explicit_urls; 426 base::hash_set<std::string> urls = manifest.explicit_urls;
385 EXPECT_TRUE(urls.find("http://smorg.borg/resource.txt") != urls.end()); 427 EXPECT_TRUE(urls.find("http://smorg.borg/resource.txt") != urls.end());
386 } 428 }
387 429
388 TEST(AppCacheManifestParserTest, DifferentOriginUrlWithSecureScheme) { 430 TEST(AppCacheManifestParserTest, DifferentOriginUrlWithSecureScheme) {
389 Manifest manifest; 431 Manifest manifest;
390 const GURL kUrl("https://www.foo.com"); 432 const GURL kUrl("https://www.foo.com");
391 const std::string kData("CACHE MANIFEST\r" 433 const std::string kData("CACHE MANIFEST\r"
392 "CACHE: \r" 434 "CACHE: \r"
393 "relative/secureschemesameorigin\r" 435 "relative/secureschemesameorigin\r"
394 "https://www.foo.com/secureschemesameorigin\r" 436 "https://www.foo.com/secureschemesameorigin\r"
395 "http://www.xyz.com/secureschemedifforigin\r" 437 "http://www.xyz.com/secureschemedifforigin\r"
396 "https://www.xyz.com/secureschemedifforigin\r"); 438 "https://www.xyz.com/secureschemedifforigin\r");
397 439
398 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest)); 440 EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
441 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
399 EXPECT_TRUE(manifest.fallback_namespaces.empty()); 442 EXPECT_TRUE(manifest.fallback_namespaces.empty());
400 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty()); 443 EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
401 444
402 base::hash_set<std::string> urls = manifest.explicit_urls; 445 base::hash_set<std::string> urls = manifest.explicit_urls;
403 const size_t kExpected = 3; 446 const size_t kExpected = 3;
404 ASSERT_EQ(kExpected, urls.size()); 447 ASSERT_EQ(kExpected, urls.size());
405 EXPECT_TRUE(urls.find("https://www.foo.com/relative/secureschemesameorigin") 448 EXPECT_TRUE(urls.find("https://www.foo.com/relative/secureschemesameorigin")
406 != urls.end()); 449 != urls.end());
407 EXPECT_TRUE(urls.find("https://www.foo.com/secureschemesameorigin") != 450 EXPECT_TRUE(urls.find("https://www.foo.com/secureschemesameorigin") !=
408 urls.end()); 451 urls.end());
(...skipping 17 matching lines...) Expand all
426 "http://foo.com/fallback_prefix /prefix wrongAnnotation\r" 469 "http://foo.com/fallback_prefix /prefix wrongAnnotation\r"
427 "http://foo.com/fallback_pattern* /pattern\tisPattern \r" 470 "http://foo.com/fallback_pattern* /pattern\tisPattern \r"
428 "NETWORK:\r" 471 "NETWORK:\r"
429 "*\r" 472 "*\r"
430 "isPattern\r" // should not be interpretted as a pattern 473 "isPattern\r" // should not be interpretted as a pattern
431 "http://foo.com/network_pattern* isPattern\r"); 474 "http://foo.com/network_pattern* isPattern\r");
432 475
433 476
434 Manifest manifest; 477 Manifest manifest;
435 EXPECT_TRUE(ParseManifest(kUrl, kManifestBody.c_str(), 478 EXPECT_TRUE(ParseManifest(kUrl, kManifestBody.c_str(),
436 kManifestBody.length(), manifest)); 479 kManifestBody.length(),
480 PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
437 EXPECT_TRUE(manifest.online_whitelist_all); 481 EXPECT_TRUE(manifest.online_whitelist_all);
438 EXPECT_EQ(1u, manifest.explicit_urls.size()); 482 EXPECT_EQ(1u, manifest.explicit_urls.size());
439 EXPECT_EQ(3u, manifest.intercept_namespaces.size()); 483 EXPECT_EQ(3u, manifest.intercept_namespaces.size());
440 EXPECT_EQ(2u, manifest.fallback_namespaces.size()); 484 EXPECT_EQ(2u, manifest.fallback_namespaces.size());
441 EXPECT_EQ(2u, manifest.online_whitelist_namespaces.size()); 485 EXPECT_EQ(2u, manifest.online_whitelist_namespaces.size());
442 EXPECT_EQ(INTERCEPT_NAMESPACE, manifest.intercept_namespaces[0].type); 486 EXPECT_EQ(INTERCEPT_NAMESPACE, manifest.intercept_namespaces[0].type);
443 EXPECT_EQ(FALLBACK_NAMESPACE, manifest.fallback_namespaces[0].type); 487 EXPECT_EQ(FALLBACK_NAMESPACE, manifest.fallback_namespaces[0].type);
444 EXPECT_EQ(NETWORK_NAMESPACE, manifest.online_whitelist_namespaces[0].type); 488 EXPECT_EQ(NETWORK_NAMESPACE, manifest.online_whitelist_namespaces[0].type);
445 EXPECT_FALSE(manifest.intercept_namespaces[0].is_pattern); 489 EXPECT_FALSE(manifest.intercept_namespaces[0].is_pattern);
446 EXPECT_TRUE(manifest.intercept_namespaces[1].is_pattern); 490 EXPECT_TRUE(manifest.intercept_namespaces[1].is_pattern);
(...skipping 22 matching lines...) Expand all
469 manifest.online_whitelist_namespaces[0].target_url); 513 manifest.online_whitelist_namespaces[0].target_url);
470 EXPECT_EQ( 514 EXPECT_EQ(
471 GURL("http://foo.com/network_pattern*"), 515 GURL("http://foo.com/network_pattern*"),
472 manifest.online_whitelist_namespaces[1].namespace_url); 516 manifest.online_whitelist_namespaces[1].namespace_url);
473 EXPECT_EQ( 517 EXPECT_EQ(
474 GURL(), 518 GURL(),
475 manifest.online_whitelist_namespaces[1].target_url); 519 manifest.online_whitelist_namespaces[1].target_url);
476 } 520 }
477 521
478 } // namespace content 522 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/appcache/appcache_unittest.cc ('k') | webkit/browser/appcache/appcache_update_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698