// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_COMMON_URL_PATTERN_H_ #define EXTENSIONS_COMMON_URL_PATTERN_H_ #include <functional> #include <iosfwd> #include <optional> #include <string> #include <string_view> #include <vector> #include "net/base/registry_controlled_domains/registry_controlled_domain.h" 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>' // <scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' | 'chrome' | // 'chrome-extension' | 'filesystem' // <host> := '*' | <IPv4 address> | [<IPv6 address>] | // '*.' <anychar except '/' and '*'>+ // <port> := [':' ('*' | <port number between 0 and 65535>)] // <path> := '/' <any chars> // // * Host is not used when the scheme is 'file'. // * The path can have embedded '*' characters which act as glob wildcards. // * '<all_urls>' is a special pattern that matches any valid URL that contains // a valid scheme (as specified by valid_schemes_). // * The '*' scheme pattern excludes file URLs. // // Examples of valid patterns: // - http://*/* // - http://*/foo* // - https://*.google.com/foo*bar // - file://monkey* // - http://127.0.0.1/* // - http://[2607:f8b0:4005:805::200e]/* // // Examples of invalid patterns: // - http://* -- path not specified // - http://*foo/bar -- * not allowed as substring of host component // - http://foo.*.bar/baz -- * must be first component // - http:/bar -- scheme separator not found // - foo://* -- invalid scheme // - chrome:// -- we don't support chrome internal URLs class URLPattern { … }; std::ostream& operator<<(std::ostream& out, const URLPattern& url_pattern); URLPatternList; #endif // EXTENSIONS_COMMON_URL_PATTERN_H_