Start implementing the URLPattern API (#36144)

* Start working on a basic URLPattern implementation

This is API part of Interop 2025, so we should definitely support it!

This change implements the basic workflow for parsing
and compiling URL patterns. Parts of it are stubbed out and will be
implemented later.

For now the API is preference-gated behind "dom_urlpattern_enabled".

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Preference-gate the URLPattern API

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Update WPT expectations

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

* Fix full wildcard value (Should be ".*" not "*")

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>

---------

Signed-off-by: Simon Wülker <simon.wuelker@arcor.de>
This commit is contained in:
Simon Wülker 2025-03-27 11:39:57 +01:00 committed by GitHub
parent e4efdfe668
commit 517f99e067
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
14 changed files with 906 additions and 189 deletions

View file

@ -759,6 +759,10 @@ Dictionaries = {
'derives': ['Clone', 'Copy'],
},
'URLPatternInit': {
'derives': ['Clone'],
},
'XRWebGLLayerInit': {
'derives': ['Clone', 'Copy'],
},

View file

@ -0,0 +1,62 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// https://urlpattern.spec.whatwg.org/#urlpattern
typedef /* USVString or */ URLPatternInit URLPatternInput;
[Exposed=(Window,Worker), Pref="dom_urlpattern_enabled"]
interface URLPattern {
// constructor(URLPatternInput input, USVString baseURL, optional URLPatternOptions options = {});
[Throws] constructor(optional URLPatternInput input = {}, optional URLPatternOptions options = {});
// boolean test(optional URLPatternInput input = {}, optional USVString baseURL);
// URLPatternResult? exec(optional URLPatternInput input = {}, optional USVString baseURL);
readonly attribute USVString protocol;
readonly attribute USVString username;
readonly attribute USVString password;
readonly attribute USVString hostname;
readonly attribute USVString port;
readonly attribute USVString pathname;
readonly attribute USVString search;
readonly attribute USVString hash;
readonly attribute boolean hasRegExpGroups;
};
dictionary URLPatternInit {
USVString protocol;
USVString username;
USVString password;
USVString hostname;
USVString port;
USVString pathname;
USVString search;
USVString hash;
USVString baseURL;
};
dictionary URLPatternOptions {
boolean ignoreCase = false;
};
// dictionary URLPatternResult {
// sequence<URLPatternInput> inputs;
// URLPatternComponentResult protocol;
// URLPatternComponentResult username;
// URLPatternComponentResult password;
// URLPatternComponentResult hostname;
// URLPatternComponentResult port;
// URLPatternComponentResult pathname;
// URLPatternComponentResult search;
// URLPatternComponentResult hash;
// };
// dictionary URLPatternComponentResult {
// USVString input;
// record<USVString, (USVString or undefined)> groups;
// };