| Index: chrome/common/extensions/url_pattern.cc
|
| diff --git a/chrome/common/extensions/url_pattern.cc b/chrome/common/extensions/url_pattern.cc
|
| index c0b04b7cf6eceb963b0693720c35d305849e8300..3b236170cf74e1ea0bd127d374dcc53aea3bb944 100644
|
| --- a/chrome/common/extensions/url_pattern.cc
|
| +++ b/chrome/common/extensions/url_pattern.cc
|
| @@ -97,14 +97,12 @@ bool IsValidPortForScheme(const std::string scheme, const std::string& port) {
|
| URLPattern::URLPattern()
|
| : valid_schemes_(SCHEME_NONE),
|
| match_all_urls_(false),
|
| - partial_filesystem_support_hack_(false),
|
| match_subdomains_(false),
|
| port_("*") {}
|
|
|
| URLPattern::URLPattern(int valid_schemes)
|
| : valid_schemes_(valid_schemes),
|
| match_all_urls_(false),
|
| - partial_filesystem_support_hack_(false),
|
| match_subdomains_(false),
|
| port_("*") {}
|
|
|
| @@ -113,7 +111,6 @@ URLPattern::URLPattern(int valid_schemes, const std::string& pattern)
|
| // appropriate when we know |pattern| is valid.
|
| : valid_schemes_(valid_schemes),
|
| match_all_urls_(false),
|
| - partial_filesystem_support_hack_(false),
|
| match_subdomains_(false),
|
| port_("*") {
|
| if (PARSE_SUCCESS != Parse(pattern))
|
| @@ -301,11 +298,11 @@ bool URLPattern::MatchesURL(const GURL& test) const {
|
| const GURL* test_url = &test;
|
| bool has_inner_url = test.inner_url() != NULL;
|
|
|
| - if (partial_filesystem_support_hack_ != has_inner_url)
|
| - return false;
|
| -
|
| - if (has_inner_url)
|
| + if (has_inner_url) {
|
| + if (!test.SchemeIsFileSystem())
|
| + return false; // The only nested URLs we handle are filesystem URLs.
|
| test_url = test.inner_url();
|
| + }
|
|
|
| if (!MatchesScheme(test_url->scheme()))
|
| return false;
|
| @@ -322,13 +319,22 @@ bool URLPattern::MatchesURL(const GURL& test) const {
|
| }
|
|
|
| bool URLPattern::MatchesSecurityOrigin(const GURL& test) const {
|
| - if (!MatchesScheme(test.scheme()))
|
| + const GURL* test_url = &test;
|
| + bool has_inner_url = test.inner_url() != NULL;
|
| +
|
| + if (has_inner_url) {
|
| + if (!test.SchemeIsFileSystem())
|
| + return false; // The only nested URLs we handle are filesystem URLs.
|
| + test_url = test.inner_url();
|
| + }
|
| +
|
| + if (!MatchesScheme(test_url->scheme()))
|
| return false;
|
|
|
| if (match_all_urls_)
|
| return true;
|
|
|
| - return MatchesSecurityOriginHelper(test);
|
| + return MatchesSecurityOriginHelper(*test_url);
|
| }
|
|
|
| bool URLPattern::MatchesScheme(const std::string& test) const {
|
| @@ -449,10 +455,6 @@ bool URLPattern::OverlapsWith(const URLPattern& other) const {
|
| DCHECK(path_.find('*') == path_.size() - 1);
|
| DCHECK(other.path().find('*') == other.path().size() - 1);
|
|
|
| - if (partial_filesystem_support_hack_ !=
|
| - other.partial_filesystem_support_hack())
|
| - return false;
|
| -
|
| if (!MatchesPath(other.path().substr(0, other.path().size() - 1)) &&
|
| !other.MatchesPath(path_.substr(0, path_.size() - 1)))
|
| return false;
|
|
|