| Index: content/browser/appcache/manifest_parser_unittest.cc
|
| diff --git a/content/browser/appcache/manifest_parser_unittest.cc b/content/browser/appcache/manifest_parser_unittest.cc
|
| index 7178d30512c0f8072d0dd563c8d91510c4747bbe..7b88220c3faf883e38c1a817649bf51913d1aff5 100644
|
| --- a/content/browser/appcache/manifest_parser_unittest.cc
|
| +++ b/content/browser/appcache/manifest_parser_unittest.cc
|
| @@ -13,6 +13,8 @@ using appcache::NamespaceVector;
|
| using appcache::FALLBACK_NAMESPACE;
|
| using appcache::INTERCEPT_NAMESPACE;
|
| using appcache::NETWORK_NAMESPACE;
|
| +using appcache::PARSE_MANIFEST_ALLOWING_INTERCEPTS;
|
| +using appcache::PARSE_MANIFEST_PER_STANDARD;
|
|
|
| namespace content {
|
|
|
| @@ -22,8 +24,10 @@ class AppCacheManifestParserTest : public testing::Test {
|
| TEST(AppCacheManifestParserTest, NoData) {
|
| GURL url;
|
| Manifest manifest;
|
| - EXPECT_FALSE(ParseManifest(url, "", 0, manifest));
|
| - EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, manifest)); // 0 len
|
| + EXPECT_FALSE(ParseManifest(url, "", 0,
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| + EXPECT_FALSE(ParseManifest(url, "CACHE MANIFEST\r", 0, // Len is 0.
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| }
|
|
|
| TEST(AppCacheManifestParserTest, CheckSignature) {
|
| @@ -43,7 +47,8 @@ TEST(AppCacheManifestParserTest, CheckSignature) {
|
|
|
| for (size_t i = 0; i < arraysize(kBadSignatures); ++i) {
|
| const std::string bad = kBadSignatures[i];
|
| - EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(), manifest));
|
| + EXPECT_FALSE(ParseManifest(url, bad.c_str(), bad.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| }
|
|
|
| const std::string kGoodSignatures[] = {
|
| @@ -60,7 +65,8 @@ TEST(AppCacheManifestParserTest, CheckSignature) {
|
|
|
| for (size_t i = 0; i < arraysize(kGoodSignatures); ++i) {
|
| const std::string good = kGoodSignatures[i];
|
| - EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(url, good.c_str(), good.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| }
|
| }
|
|
|
| @@ -70,7 +76,8 @@ TEST(AppCacheManifestParserTest, NoManifestUrl) {
|
| "relative/tobase.com\r"
|
| "http://absolute.com/addme.com");
|
| const GURL kUrl;
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.explicit_urls.empty());
|
| EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| @@ -97,7 +104,8 @@ TEST(AppCacheManifestParserTest, ExplicitUrls) {
|
| " \t relative/four#stripme\n\r"
|
| "*\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| EXPECT_FALSE(manifest.online_whitelist_all);
|
| @@ -112,6 +120,24 @@ TEST(AppCacheManifestParserTest, ExplicitUrls) {
|
|
|
| // Wildcard is treated as a relative URL in explicit section.
|
| EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
|
| +
|
| + // We should get the same results with intercepts disallowed.
|
| + manifest = Manifest();
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_PER_STANDARD, manifest));
|
| + EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| + EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| + EXPECT_FALSE(manifest.online_whitelist_all);
|
| +
|
| + urls = manifest.explicit_urls;
|
| + ASSERT_EQ(kExpected, urls.size());
|
| + EXPECT_TRUE(urls.find("http://www.foo.com/relative/one") != urls.end());
|
| + EXPECT_TRUE(urls.find("http://www.foo.com/two") != urls.end());
|
| + EXPECT_TRUE(urls.find("http://www.diff.com/three") != urls.end());
|
| + EXPECT_TRUE(urls.find("http://www.foo.com/relative/four") != urls.end());
|
| +
|
| + // Wildcard is treated as a relative URL in explicit section.
|
| + EXPECT_TRUE(urls.find("http://www.foo.com/*") != urls.end());
|
| }
|
|
|
| TEST(AppCacheManifestParserTest, WhitelistUrls) {
|
| @@ -134,7 +160,8 @@ TEST(AppCacheManifestParserTest, WhitelistUrls) {
|
| "http://www.five.com\r\n"
|
| "*foo\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.explicit_urls.empty());
|
| EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| EXPECT_TRUE(manifest.intercept_namespaces.empty());
|
| @@ -180,7 +207,8 @@ TEST(AppCacheManifestParserTest, FallbackUrls) {
|
| "relative/four#strip relative/fourfb#strip\r"
|
| "http://www.glorp.com/notsame relative/skipped\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.explicit_urls.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| EXPECT_FALSE(manifest.online_whitelist_all);
|
| @@ -230,7 +258,8 @@ TEST(AppCacheManifestParserTest, FallbackUrlsWithPort) {
|
| "http://www.portme.com/noport http://www.portme.com:1234/skipped\r"
|
| "http://www.portme.com:1234/skipme http://www.portme.com/noport\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.explicit_urls.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| EXPECT_FALSE(manifest.online_whitelist_all);
|
| @@ -272,7 +301,8 @@ TEST(AppCacheManifestParserTest, InterceptUrls) {
|
| "http://www.portme.com:1234/skipme return http://www.portme.com/noport\r"
|
| "relative/wrong/again missing/intercept_type\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| EXPECT_TRUE(manifest.explicit_urls.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| @@ -296,6 +326,16 @@ TEST(AppCacheManifestParserTest, InterceptUrls) {
|
| intercepts[2].namespace_url);
|
| EXPECT_EQ(GURL("http://www.portme.com:1234/int3"),
|
| intercepts[2].target_url);
|
| +
|
| + // Disallow intercepts ths time.
|
| + manifest = Manifest();
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_PER_STANDARD, manifest));
|
| + EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| + EXPECT_TRUE(manifest.explicit_urls.empty());
|
| + EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
| + EXPECT_TRUE(manifest.intercept_namespaces.empty());
|
| + EXPECT_FALSE(manifest.online_whitelist_all);
|
| }
|
|
|
| TEST(AppCacheManifestParserTest, ComboUrls) {
|
| @@ -320,7 +360,8 @@ TEST(AppCacheManifestParserTest, ComboUrls) {
|
| "NETWORK:\r\n"
|
| "relative/whitelist-3#strip\r"
|
| "http://combo.com:99/whitelist-4\r");
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.online_whitelist_all);
|
|
|
| base::hash_set<std::string> urls = manifest.explicit_urls;
|
| @@ -366,8 +407,8 @@ TEST(AppCacheManifestParserTest, UnusualUtf8) {
|
| const std::string kData("CACHE MANIFEST\r"
|
| "\xC0" "invalidutf8\r"
|
| "nonbmp" "\xF1\x84\xAB\xBC\r");
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| -
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| base::hash_set<std::string> urls = manifest.explicit_urls;
|
| EXPECT_TRUE(urls.find("http://bad.com/%EF%BF%BDinvalidutf8") != urls.end());
|
| EXPECT_TRUE(urls.find("http://bad.com/nonbmp%F1%84%AB%BC") != urls.end());
|
| @@ -379,7 +420,8 @@ TEST(AppCacheManifestParserTest, IgnoreAfterSpace) {
|
| const std::string kData(
|
| "CACHE MANIFEST\r"
|
| "resource.txt this stuff after the white space should be ignored\r");
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
|
|
| base::hash_set<std::string> urls = manifest.explicit_urls;
|
| EXPECT_TRUE(urls.find("http://smorg.borg/resource.txt") != urls.end());
|
| @@ -395,7 +437,8 @@ TEST(AppCacheManifestParserTest, DifferentOriginUrlWithSecureScheme) {
|
| "http://www.xyz.com/secureschemedifforigin\r"
|
| "https://www.xyz.com/secureschemedifforigin\r");
|
|
|
| - EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(), manifest));
|
| + EXPECT_TRUE(ParseManifest(kUrl, kData.c_str(), kData.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.fallback_namespaces.empty());
|
| EXPECT_TRUE(manifest.online_whitelist_namespaces.empty());
|
|
|
| @@ -433,7 +476,8 @@ TEST(AppCacheManifestParserTest, PatternMatching) {
|
|
|
| Manifest manifest;
|
| EXPECT_TRUE(ParseManifest(kUrl, kManifestBody.c_str(),
|
| - kManifestBody.length(), manifest));
|
| + kManifestBody.length(),
|
| + PARSE_MANIFEST_ALLOWING_INTERCEPTS, manifest));
|
| EXPECT_TRUE(manifest.online_whitelist_all);
|
| EXPECT_EQ(1u, manifest.explicit_urls.size());
|
| EXPECT_EQ(3u, manifest.intercept_namespaces.size());
|
|
|