Commit cf78825d authored by Yann Dago's avatar Yann Dago Committed by Commit Bot

Fix chrome-devtools://* acting like * in URLWhitelist

Bug: 992711
Change-Id: I1ffd1948ce606d8c37630a38659db4bf8eedc1d3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1764469
Commit-Queue: Yann Dago <ydago@chromium.org>
Reviewed-by: default avatarOwen Min <zmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#689695}
parent 02f1fa2c
......@@ -65,6 +65,9 @@ const char* kBypassBlacklistWildcardForSchemes[] = {
"chrome-search",
};
const char kDevToolsLegacyScheme[] = "chrome-devtools";
const char kDevToolsScheme[] = "devtools";
// Maximum filters per policy. Filters over this index are ignored.
const size_t kMaxFiltersPerPolicy = 1000;
......@@ -259,9 +262,19 @@ bool URLBlacklist::FilterToComponents(const std::string& filter,
DCHECK(path);
DCHECK(query);
url::Parsed parsed;
const std::string lc_filter = base::ToLowerASCII(filter);
std::string lc_filter = base::ToLowerASCII(filter);
const std::string url_scheme = url_formatter::SegmentURL(filter, &parsed);
// This is for backward compatibility between 'chrome-devtools' and 'devtools'
// schemes. url_formatter::SegmentURL will return 'devtools' if the filter's
// scheme is the deprecated 'chrome-devtools'. To comply with that
// transformation, since both schemes are equivalent, if the filter's scheme
// was 'chrome-devtools', it should be replaced by 'devtools'.
if (url_scheme == kDevToolsScheme &&
lc_filter.find(kDevToolsLegacyScheme) == 0) {
lc_filter.replace(0, 15, kDevToolsScheme);
}
// Check if it's a scheme wildcard pattern. We support both versions
// (scheme:* and scheme://*) the later being consistent with old filter
// definitions.
......
......@@ -455,6 +455,25 @@ TEST_F(URLBlacklistManagerTest, Filtering) {
allowed->AppendString("example.com");
blacklist.Allow(allowed.get());
EXPECT_FALSE(blacklist.IsURLBlocked(GURL("http://example.com")));
// Treats chrome-devtools and devtools schemes the same way.
blocked.reset(new base::ListValue);
blocked->AppendString("*");
blacklist.Block(blocked.get());
allowed.reset(new base::ListValue);
allowed->AppendString("chrome-devtools://*");
blacklist.Allow(allowed.get());
EXPECT_FALSE(blacklist.IsURLBlocked(GURL("devtools://something.com")));
EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://something.com")));
blocked.reset(new base::ListValue);
blocked->AppendString("*");
blacklist.Block(blocked.get());
allowed.reset(new base::ListValue);
allowed->AppendString("devtools://*");
blacklist.Allow(allowed.get());
EXPECT_FALSE(blacklist.IsURLBlocked(GURL("devtools://something.com")));
EXPECT_TRUE(blacklist.IsURLBlocked(GURL("https://something.com")));
}
TEST_F(URLBlacklistManagerTest, QueryParameters) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment