diff --git a/src/browser/html/elements.zig b/src/browser/html/elements.zig
index e9e95fdf..a3104fa3 100644
--- a/src/browser/html/elements.zig
+++ b/src/browser/html/elements.zig
@@ -281,7 +281,7 @@ pub const HTMLAnchorElement = struct {
// TODO return a disposable string
pub fn get_protocol(self: *parser.Anchor, page: *Page) ![]const u8 {
var u = try url(self, page);
- return u.get_protocol(page);
+ return u.get_protocol();
}
pub fn set_protocol(self: *parser.Anchor, v: []const u8, page: *Page) !void {
diff --git a/src/browser/html/location.zig b/src/browser/html/location.zig
index 339e62ba..3e3e593b 100644
--- a/src/browser/html/location.zig
+++ b/src/browser/html/location.zig
@@ -41,8 +41,8 @@ pub const Location = struct {
return page.navigateFromWebAPI(href, .{ .reason = .script });
}
- pub fn get_protocol(self: *Location, page: *Page) ![]const u8 {
- return self.url.get_protocol(page);
+ pub fn get_protocol(self: *Location) []const u8 {
+ return self.url.get_protocol();
}
pub fn get_host(self: *Location, page: *Page) ![]const u8 {
diff --git a/src/browser/url/url.zig b/src/browser/url/url.zig
index 1288fea0..08c97bf6 100644
--- a/src/browser/url/url.zig
+++ b/src/browser/url/url.zig
@@ -164,8 +164,11 @@ pub const URL = struct {
return aw.written();
}
- pub fn get_protocol(self: *URL, page: *Page) ![]const u8 {
- return try std.mem.concat(page.arena, u8, &[_][]const u8{ self.uri.scheme, ":" });
+ pub fn get_protocol(self: *const URL) []const u8 {
+ // std.Uri keeps a pointer to "https", "http" (scheme part) so we know
+ // its followed by ':'.
+ const scheme = self.uri.scheme;
+ return scheme.ptr[0 .. scheme.len + 1];
}
pub fn get_username(self: *URL) []const u8 {
diff --git a/src/tests/url/url.html b/src/tests/url/url.html
index a28a980a..f6b8301c 100644
--- a/src/tests/url/url.html
+++ b/src/tests/url/url.html
@@ -76,3 +76,8 @@
testing.expectEqual("", sk.hostname);
testing.expectEqual("sveltekit-internal://", sk.href);
+
+