Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions packages/playwright-core/src/utils/isomorphic/urlMatch.ts
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,12 @@ function resolveGlobBase(baseURL: string | undefined, match: string): string {
}
// Escaped `\\?` behaves the same as `?` in our glob patterns.
match = match.replaceAll(/\\\\\?/g, '?');
// Node URL constructors automatically uses colon as an indicator of a base URL, such as with `about:blank`
// Only perform special handling if we have a specified base URL
const splitScheme = match.split('://');
const schemelessPath = splitScheme.length === 1 ? splitScheme[0] : splitScheme[1];
if (schemelessPath !== undefined && baseURL !== undefined && schemelessPath.indexOf(':') !== -1)
return match;
// Glob symbols may be escaped in the URL and some of them such as ? affect resolution,
// so we replace them with safe components first.
const relativePath = match.split('/').map((token, index) => {
Expand Down
6 changes: 6 additions & 0 deletions tests/page/interception.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,12 @@ it('should work with glob', async () => {
expect(urlMatches('http://playwright.dev/foo', 'http://playwright.dev/foo?bar', '\\\\?bar')).toBeTruthy();
expect(urlMatches('http://first.host/', 'http://second.host/foo', '**/foo')).toBeTruthy();
expect(urlMatches('http://playwright.dev/', 'http://localhost/', '*//localhost/')).toBeTruthy();

expect(urlMatches('http://playwright.dev/', 'about:blank', 'about:blank')).toBeTruthy();
expect(urlMatches('http://playwright.dev/', 'about:blank', 'http://playwright.dev/')).toBeFalsy();
expect(urlMatches(undefined, 'about:blank', 'about:blank')).toBeTruthy();
expect(urlMatches(undefined, 'about:blank', 'about:*')).toBeTruthy();
expect(urlMatches(undefined, 'notabout:blank', 'about:*')).toBeFalsy();
});

it('should intercept by glob', async function({ page, server, isAndroid }) {
Expand Down
Loading