Skip to content

Commit d564bc4

Browse files
committed
chore: refactor UrlMatcher
1 parent eb08046 commit d564bc4

File tree

2 files changed

+59
-36
lines changed

2 files changed

+59
-36
lines changed

playwright/src/main/java/com/microsoft/playwright/impl/UrlMatcher.java

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
import java.net.MalformedURLException;
2424
import java.net.URL;
25+
import java.util.ArrayList;
26+
import java.util.List;
2527
import java.util.Objects;
2628
import java.util.function.Predicate;
2729
import java.util.regex.Pattern;
@@ -30,20 +32,14 @@
3032
import static com.microsoft.playwright.impl.Utils.toJsRegexFlags;
3133

3234
class UrlMatcher {
33-
final Object rawSource;
34-
private final Predicate<String> predicate;
35-
36-
private static Predicate<String> toPredicate(Pattern pattern) {
37-
return s -> pattern.matcher(s).find();
38-
}
39-
40-
static UrlMatcher any() {
41-
return new UrlMatcher((Object) null, null);
42-
}
35+
private final URL baseURL;
36+
public final String glob;
37+
public final Pattern pattern;
38+
public final Predicate<String> predicate;
4339

4440
static UrlMatcher forOneOf(URL baseUrl, Object object) {
4541
if (object == null) {
46-
return UrlMatcher.any();
42+
return new UrlMatcher((Predicate<String>) s -> true);
4743
}
4844
if (object instanceof String) {
4945
return new UrlMatcher(baseUrl, (String) object);
@@ -68,50 +64,79 @@ static String resolveUrl(URL baseUrl, String spec) {
6864
}
6965
}
7066

71-
UrlMatcher(URL base, String url) {
72-
this(url, toPredicate(Pattern.compile(globToRegex(resolveUrl(base, url)))).or(s -> url == null || url.equals(s)));
67+
UrlMatcher(URL baseURL, String glob) {
68+
this(baseURL, glob, null, null);
7369
}
7470

7571
UrlMatcher(Pattern pattern) {
76-
this(pattern, toPredicate(pattern));
72+
this(null, null, pattern, null);
7773
}
7874
UrlMatcher(Predicate<String> predicate) {
79-
this(predicate, predicate);
75+
this(null, null, null, predicate);
8076
}
8177

82-
private UrlMatcher(Object rawSource, Predicate<String> predicate) {
83-
this.rawSource = rawSource;
78+
private UrlMatcher(URL baseURL, String glob, Pattern pattern, Predicate<String> predicate) {
79+
this.baseURL = baseURL;
80+
this.glob = glob;
81+
this.pattern = pattern;
8482
this.predicate = predicate;
8583
}
8684

8785
boolean test(String value) {
88-
return predicate == null || predicate.test(value);
86+
return testImpl(baseURL, pattern, predicate, glob, value);
87+
}
88+
89+
private static boolean testImpl(URL baseURL, Pattern pattern, Predicate<String> predicate, String glob, String value) {
90+
if (pattern != null) {
91+
return pattern.matcher(value).find();
92+
}
93+
if (predicate != null) {
94+
return predicate.test(value);
95+
}
96+
if (glob != null) {
97+
return Pattern.compile(globToRegex(resolveUrl(baseURL, glob))).matcher(value).find();
98+
}
99+
return true;
89100
}
90101

91102
@Override
92103
public boolean equals(Object o) {
93104
if (this == o) return true;
94105
if (o == null || getClass() != o.getClass()) return false;
95106
UrlMatcher that = (UrlMatcher) o;
96-
if (rawSource instanceof Pattern && that.rawSource instanceof Pattern) {
97-
Pattern a = (Pattern) rawSource;
98-
Pattern b = (Pattern) that.rawSource;
99-
return a.pattern().equals(b.pattern()) && a.flags() == b.flags();
107+
List<Boolean> matches = new ArrayList<>();
108+
if (baseURL != null && that.baseURL != null) {
109+
matches.add(baseURL.equals(that.baseURL));
110+
}
111+
if (pattern != null && that.pattern != null) {
112+
matches.add(pattern.pattern().equals(that.pattern.pattern()) && pattern.flags() == that.pattern.flags());
113+
}
114+
if (predicate != null && that.predicate != null) {
115+
matches.add(predicate.equals(that.predicate));
100116
}
101-
return Objects.equals(rawSource, that.rawSource);
117+
if (glob != null && that.glob != null) {
118+
matches.add(glob.equals(that.glob));
119+
}
120+
return matches.stream().allMatch(m -> m);
102121
}
103122

104123
@Override
105124
public int hashCode() {
106-
return Objects.hash(rawSource);
125+
if (pattern != null) {
126+
return pattern.hashCode();
127+
}
128+
if (predicate != null) {
129+
return predicate.hashCode();
130+
}
131+
return glob.hashCode();
107132
}
108133

109134
@Override
110135
public String toString() {
111-
if (rawSource == null)
112-
return "<any>";
113-
if (rawSource instanceof Predicate)
114-
return "matching predicate";
115-
return rawSource.toString();
136+
if (pattern != null)
137+
return String.format("<regex pattern=\"%s\" flags=\"%s\">", pattern.pattern(), toJsRegexFlags(pattern));
138+
if (this.predicate != null)
139+
return "<predicate>";
140+
return String.format("<glob pattern=\"%s\">", glob);
116141
}
117142
}

playwright/src/main/java/com/microsoft/playwright/impl/Utils.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -462,13 +462,11 @@ static JsonObject interceptionPatterns(List<UrlMatcher> matchers) {
462462
JsonArray jsonPatterns = new JsonArray();
463463
for (UrlMatcher matcher: matchers) {
464464
JsonObject jsonPattern = new JsonObject();
465-
Object urlFilter = matcher.rawSource;
466-
if (urlFilter instanceof String) {
467-
jsonPattern.addProperty("glob", (String) urlFilter);
468-
} else if (urlFilter instanceof Pattern) {
469-
Pattern pattern = (Pattern) urlFilter;
470-
jsonPattern.addProperty("regexSource", pattern.pattern());
471-
jsonPattern.addProperty("regexFlags", toJsRegexFlags(pattern));
465+
if (matcher.glob != null) {
466+
jsonPattern.addProperty("glob", matcher.glob);
467+
} else if (matcher.pattern != null) {
468+
jsonPattern.addProperty("regexSource", matcher.pattern.pattern());
469+
jsonPattern.addProperty("regexFlags", toJsRegexFlags(matcher.pattern));
472470
} else {
473471
// Match all requests.
474472
jsonPattern.addProperty("glob", "**/*");

0 commit comments

Comments
 (0)