Code change:
This switches the custom wildcard matching to use with regexp support disabled. URLPattern is being used by the service worker routing API's and is what the web side is standardizing on for anything that pattern-matches URLs. This splits the match pattern into explicit path and search (query param) components and forces the origin to be inherited from the dictionary request URL. Also included here is a new field for to allow for matching on request destinations. The biggest use case for that will be for allowing site-wide HTML dictionaries to do something like and for the dictionary to not be sent for every request across the site (images, etc). See issues , ,

Related discussion:
text: 2.2.2. When a dictionary is stored as a result of a "Use-As-Dictionary" <del> directive, it includes a "match" string with the URL pattern of request URLs that the dictionary can be used for. When comparing request URLs to the available dictionary match patterns, the comparison should account for the * wildcard when matching against request URLs.  This can be accomplished with the following algorithm which returns TRUE for a successful match and FALSE for no-match: Let MATCH represent the absolute URL pattern from the "match" value for the given dictionary. LET URL represent the request URL being checked. If there are no * characters in MATCH: </del> <ins> directive, it includes "match", "match-query" and "match-dest" strings that are used to match an outgoing request from a client to the available dictionaries. </ins> <del> If the MATCH and URL strings are identical, return TRUE. </del> <ins> To see if an outbound request matches a given dictionary, the following algorithm will return TRUE for a successful match and FALSE for no-match: </ins> <del> Else, return FALSE. </del> <ins> If the current client supports request destinations: </ins> <del> If there is a single * character in MATCH and it is at the end of the string: </del> <ins> Let DEST be the value of "match-dest" for the given dictionary. </ins> <del> If the MATCH string is identical to the start of the URL string, return TRUE. </del> <ins> Let REQUEST_DEST be the value of the destination for the current request. </ins> <del> Else, return FALSE. </del> <ins> If DEST is not an empty string and If DEST and REQUEST_DEST are not the same value, return FALSE </ins> <del> Split the MATCH string by the * character into an array of MATCHES (excluding the * deliminator from the individual entries). </del> <ins> Let PATH be the value of "match" for the given dictionary. </ins> <del> If there is not a * character at the end of MATCH: </del> <ins> Let SEARCH be the value of "match-query" for the given dictionary. </ins> <del> Pop the last entry in MATCHES from the end of the array into PATTERN. </del> <ins> Let BASEURL be the request URL of the given dictionary. </ins> <del> If PATTERN is identical to the end of the URL string, remove the end of the URL string to the beginning of the match to PATTERN. </del> <ins> Let PATTERN be a URLPattern constructed by setting pathname=PATH, search=SEARCH, baseURL=BASEURL (https://urlpattern.spec.whatwg.org/). </ins> <del> Else, return FALSE. Pop the first entry in MATCHES from the front of the array into PATTERN. If PATTERN is not identical to the start of the URL string, return FALSE. Pop each entry off of the front of the MATCHES array into PATTERN. For each PATTERN, in order: Search for the first match of PATTERN in URL, starting from the position of the end of the previous match. If no match is found, return FALSE. </del> <ins> LET URL represent the request URL being checked. </ins> <del> Return TRUE. </del> <ins> Return the result of running the URLPattern "match" algorithm (https://urlpattern.spec.whatwg.org/#match) </ins> 2.2.3. When there are multiple dictionaries that match a given request URL, <del> the client MUST pick the dictionary with the longest match pattern string length. </del> <ins> the client MUST pick a single dictionary using the following rules: 1.  For clients that support request destinations, a dictionary that specifies and matches a "match-dest" takes precedence over a match that does not use a destination.  1.  Given equivalent destination precedence, the dictionary with the longest "match" takes precedence. 1.  Given equivalent destination and path precedence, the dictionary with the longest "match-query" takes precedence.  1.  Given equivalent destination, path and search precedence, the most recently fetched dictionary takes precedence. </ins> 3.