Index: chrome/common/extensions/url_pattern.h |
diff --git a/chrome/common/extensions/url_pattern.h b/chrome/common/extensions/url_pattern.h |
index 6a83c017ce7c3b5a3dd2cd0348a16fd009352b14..77ab3814501e17894ecabe276108c44decaadacf 100644 |
--- a/chrome/common/extensions/url_pattern.h |
+++ b/chrome/common/extensions/url_pattern.h |
@@ -14,12 +14,14 @@ class GURL; |
// A pattern that can be used to match URLs. A URLPattern is a very restricted |
// subset of URL syntax: |
// |
-// <url-pattern> := <scheme>://<host><port><path> | '<all_urls>' |
+// <url-pattern> := [filesystem:]<scheme>://<host><port><path> | '<all_urls>' | |
+// <nonstandard-scheme>:<any chars> |
// <scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' | 'chrome' | |
-// 'chrome-extension' | 'filesystem' |
+// 'chrome-extension' |
// <host> := '*' | '*.' <anychar except '/' and '*'>+ |
// <port> := [':' ('*' | <port number between 0 and 65535>)] |
// <path> := '/' <any chars> |
+// <nonstandard-scheme> := <any string except for "//" or those in scheme> |
// |
// * Host is not used when the scheme is 'file'. |
// * The path can have embedded '*' characters which act as glob wildcards. |
@@ -33,6 +35,7 @@ class GURL; |
// - https://*.google.com/foo*bar |
// - file://monkey* |
// - http://127.0.0.1/* |
+// - filesystem:*://*/* |
// |
// Examples of invalid patterns: |
// - http://* -- path not specified |
@@ -99,7 +102,12 @@ class URLPattern { |
// Gets the bitmask of valid schemes. |
int valid_schemes() const { return valid_schemes_; } |
+ // Sets the bitmask of valid schemes and inner_schemes. |
void SetValidSchemes(int valid_schemes); |
+ // Gets the bitmask of valid inner schemes. |
+ int valid_inner_schemes() const { return valid_inner_schemes_; } |
+ // Sets the bitmask of valid inner_schemes. |
+ void SetValidInnerSchemes(int valid_schemes); |
// Gets the host the pattern matches. This can be an empty string if the |
// pattern matches all hosts (the input was <scheme>://*/<whatever>). |
@@ -123,14 +131,27 @@ class URLPattern { |
// pattern matches all valid schemes (as defined by the valid_schemes_ |
// property). Returns false on failure (if the scheme is not valid). |
bool SetScheme(const std::string& scheme); |
+ // Sets the inner scheme for pattern matches; this can only be used for |
+ // patterns whose scheme has already been set to "filesystem". This can be a |
+ // single '*' if the pattern matches all valid schemes (as defined by the |
+ // valid_inner_schemes_ property). Returns false on failure (if the scheme is |
+ // not valid). |
+ bool SetInnerScheme(const std::string& scheme); |
// Note: You should use MatchesScheme() instead of this getter unless you |
// absolutely need the exact scheme. This is exposed for testing. |
const std::string& scheme() const { return scheme_; } |
+ // Note: You should use MatchesInnerScheme() instead of this getter unless you |
+ // absolutely need the exact scheme. This is exposed for testing. |
+ const std::string& inner_scheme() const { return inner_scheme_; } |
// Returns true if the specified scheme can be used in this URL pattern, and |
// false otherwise. Uses valid_schemes_ to determine validity. |
bool IsValidScheme(const std::string& scheme) const; |
+ // Returns true if the specified scheme can be used in this URL pattern, and |
+ // false otherwise. Uses valid_inner_schemes_ to determine validity. |
+ bool IsValidInnerScheme(const std::string& scheme) const; |
+ |
// Returns true if this instance matches the specified URL. |
bool MatchesURL(const GURL& test) const; |
@@ -140,6 +161,10 @@ class URLPattern { |
// Returns true if |test| matches our scheme. |
bool MatchesScheme(const std::string& test) const; |
+ // Returns true if |test| matches our inner scheme. |
+ // Only use this if scheme is "filesystem". |
+ bool MatchesInnerScheme(const std::string& test) const; |
+ |
// Returns true if |test| matches our host. |
bool MatchesHost(const std::string& test) const; |
bool MatchesHost(const GURL& test) const; |
@@ -200,6 +225,11 @@ class URLPattern { |
// scheme. MatchesScheme uses this to decide whether a wildcard scheme_ |
// matches a given test scheme. |
int valid_schemes_; |
+ // A bitmask containing the inner schemes which are considered valid for this |
+ // pattern. Parse() uses this to decide whether a pattern contains a valid |
+ // scheme. MatchesInnerScheme uses this to decide whether a wildcard |
+ // inner_scheme_ matches a given test scheme. |
+ int valid_inner_schemes_; |
// True if this is a special-case "<all_urls>" pattern. |
bool match_all_urls_; |
@@ -207,6 +237,9 @@ class URLPattern { |
// The scheme for the pattern. |
std::string scheme_; |
+ // The inner scheme for the pattern, used only when scheme_ is "filesystem". |
+ std::string inner_scheme_; |
+ |
// The host without any leading "*" components. |
std::string host_; |