diff --git a/lib/internal/url.js b/lib/internal/url.js index 6e6cc62226766b..7e53ac1dc2d7ba 100644 --- a/lib/internal/url.js +++ b/lib/internal/url.js @@ -1112,7 +1112,6 @@ function originFor(url, base) { case 'https:': case 'ws:': case 'wss:': - case 'file': origin = new TupleOrigin(protocol.slice(0, -1), url[context].host, url[context].port, diff --git a/test/parallel/test-whatwg-url-properties.js b/test/parallel/test-whatwg-url-properties.js index b5b3119422e668..c5d60229a9f2c1 100644 --- a/test/parallel/test-whatwg-url-properties.js +++ b/test/parallel/test-whatwg-url-properties.js @@ -142,3 +142,19 @@ assert.strictEqual(url.searchParams, oldParams); assert.strictEqual(opts.search, '?l=24'); assert.strictEqual(opts.hash, '#test'); } + +// Test special origins +[ + { expected: 'https://whatwg.org', + url: 'blob:https://whatwg.org/d0360e2f-caee-469f-9a2f-87d5b0456f6f' }, + { expected: 'ftp://example.org', url: 'ftp://example.org/foo' }, + { expected: 'gopher://gopher.quux.org', url: 'gopher://gopher.quux.org/1/' }, + { expected: 'http://example.org', url: 'http://example.org/foo' }, + { expected: 'https://example.org', url: 'https://example.org/foo' }, + { expected: 'ws://example.org', url: 'ws://example.org/foo' }, + { expected: 'wss://example.org', url: 'wss://example.org/foo' }, + { expected: 'null', url: 'file:///tmp/mock/path' }, + { expected: 'null', url: 'npm://nodejs/rules' } +].forEach((test) => { + assert.strictEqual(new URL(test.url).origin, test.expected); +});