diff options
-rw-r--r-- | src/bun.js/bindings/URLDecomposition.cpp | 9 | ||||
-rw-r--r-- | test/js/web/url/url.test.ts | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/src/bun.js/bindings/URLDecomposition.cpp b/src/bun.js/bindings/URLDecomposition.cpp index d3f11b27f..21168f70f 100644 --- a/src/bun.js/bindings/URLDecomposition.cpp +++ b/src/bun.js/bindings/URLDecomposition.cpp @@ -35,7 +35,14 @@ String URLDecomposition::origin() const if (fullURL.protocolIsInHTTPFamily() or fullURL.protocolIsInFTPFamily() or fullURL.protocolIs("ws"_s) or fullURL.protocolIs("wss"_s)) return fullURL.protocolHostAndPort(); - + if (fullURL.protocolIsBlob()) { + const String& path = fullURL.path().toString(); + const URL subUrl { URL {}, path }; + if (subUrl.isValid()) { + if (subUrl.protocolIsInHTTPFamily() or subUrl.protocolIsInFTPFamily() or subUrl.protocolIs("ws"_s) or subUrl.protocolIs("wss"_s) or subUrl.protocolIsFile()) + return subUrl.protocolHostAndPort(); + } + } return "null"_s; } diff --git a/test/js/web/url/url.test.ts b/test/js/web/url/url.test.ts index 7ddda80ef..f19a132df 100644 --- a/test/js/web/url/url.test.ts +++ b/test/js/web/url/url.test.ts @@ -52,8 +52,7 @@ describe("url", () => { expect(url.protocol).toBe("mailto:"); expect(url.origin).toBe("null"); }); - it.skip("should work with blob urls", () => { - // TODO + it("blob urls", () => { var url = new URL("blob:https://example.com/1234-5678"); expect(url.protocol).toBe("blob:"); expect(url.origin).toBe("https://example.com"); @@ -72,6 +71,9 @@ describe("url", () => { url = new URL("blob:ws://example.com"); expect(url.protocol).toBe("blob:"); expect(url.origin).toBe("ws://example.com"); + url = new URL("blob:file:///folder/else/text.txt"); + expect(url.protocol).toBe("blob:"); + expect(url.origin).toBe("file://"); }); it("prints", () => { expect(Bun.inspect(new URL("https://example.com"))).toBe(`URL { |