// Copyright 2024 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_NETWORK_SHARED_DICTIONARY_SIMPLE_URL_PATTERN_MATCHER_H_ #define SERVICES_NETWORK_SHARED_DICTIONARY_SIMPLE_URL_PATTERN_MATCHER_H_ #include <memory> #include <string> #include <string_view> #include "base/component_export.h" #include "base/gtest_prod_util.h" #include "base/types/expected.h" #include "base/types/pass_key.h" #include "third_party/liburlpattern/parse.h" #include "third_party/liburlpattern/pattern.h" class GURL; namespace re2 { class RE2; } namespace network { // This class partially implements URL Pattern spec which is needed for // Dictionary URL matching of Compression Dictionary Transport. // https://urlpattern.spec.whatwg.org/ // https://www.ietf.org/archive/id/draft-ietf-httpbis-compression-dictionary-01.html#name-dictionary-url-matching // // This class can be created from a constructor string and a base URL. // And can run the `test` method of URLPattern only with a URL. // // This class doesn't support regexp groups, because this class is used in the // network service, and there is a security concern in allowing user-defined // regular expressions. Also this class doesn't support setting `ignoreCase` // option to true. // // Note: We share the limitation of regexp groups with ServiceWorker static // routing API. For that API, we accept URLPattern JS objects without regexp // groups, and contvet them to blink::SafeUrlPattern structures in Blink, and // pass them to the browser process via IPC, and evaluate the pattern with // resource URLs. For Compression Dictionary Transport feature, we parses the // constructor string and evaluate the pattern with resource URLs in the network // service. To simplify this class, this class doesn't share any logic with // ServiceWorker static routing API. But if we will have more usecases of // URLPattern, we may need to consider combining those logics. // Context: https://crrev.com/c/5209732/comment/2d53e11c_e4b8c868/ class COMPONENT_EXPORT(NETWORK_SERVICE) SimpleUrlPatternMatcher { … }; } // namespace network #endif // SERVICES_NETWORK_SHARED_DICTIONARY_SIMPLE_URL_PATTERN_MATCHER_H_