From 4ecd35c2750aa6ad7240ac75e5b9468597886e29 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 12 Dec 2025 20:01:12 +0000 Subject: [PATCH] fix(mac): render Canvas HTML correctly --- apps/macos/Sources/Clawdis/CanvasScheme.swift | 11 ++++++----- .../Sources/Clawdis/CanvasSchemeHandler.swift | 16 +++++++++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/apps/macos/Sources/Clawdis/CanvasScheme.swift b/apps/macos/Sources/Clawdis/CanvasScheme.swift index 0fca58848..d35aa4932 100644 --- a/apps/macos/Sources/Clawdis/CanvasScheme.swift +++ b/apps/macos/Sources/Clawdis/CanvasScheme.swift @@ -20,10 +20,12 @@ enum CanvasScheme { static func mimeType(forExtension ext: String) -> String { switch ext.lowercased() { - case "html", "htm": "text/html; charset=utf-8" - case "js", "mjs": "application/javascript; charset=utf-8" - case "css": "text/css; charset=utf-8" - case "json", "map": "application/json; charset=utf-8" + // Note: WKURLSchemeHandler uses URLResponse(mimeType:), which expects a bare MIME type + // (no `; charset=...`). Encoding is provided via URLResponse(textEncodingName:). + case "html", "htm": "text/html" + case "js", "mjs": "application/javascript" + case "css": "text/css" + case "json", "map": "application/json" case "svg": "image/svg+xml" case "png": "image/png" case "jpg", "jpeg": "image/jpeg" @@ -37,4 +39,3 @@ enum CanvasScheme { } } } - diff --git a/apps/macos/Sources/Clawdis/CanvasSchemeHandler.swift b/apps/macos/Sources/Clawdis/CanvasSchemeHandler.swift index fce3327f8..91f69dd63 100644 --- a/apps/macos/Sources/Clawdis/CanvasSchemeHandler.swift +++ b/apps/macos/Sources/Clawdis/CanvasSchemeHandler.swift @@ -22,12 +22,13 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler { let response = self.response(for: url) let mime = response.mime let data = response.data + let encoding = self.textEncodingName(forMimeType: mime) let urlResponse = URLResponse( url: url, mimeType: mime, expectedContentLength: data.count, - textEncodingName: "utf-8") + textEncodingName: encoding) urlSchemeTask.didReceive(urlResponse) urlSchemeTask.didReceive(data) urlSchemeTask.didFinish() @@ -175,7 +176,7 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler { """ - return CanvasResponse(mime: "text/html; charset=utf-8", data: Data(html.utf8)) + return CanvasResponse(mime: "text/html", data: Data(html.utf8)) } private func welcomePage(sessionRoot: URL) -> CanvasResponse { @@ -190,5 +191,14 @@ final class CanvasSchemeHandler: NSObject, WKURLSchemeHandler { """ return self.html(body, title: "Canvas") } -} + private func textEncodingName(forMimeType mimeType: String) -> String? { + if mimeType.hasPrefix("text/") { return "utf-8" } + switch mimeType { + case "application/javascript", "application/json", "image/svg+xml": + return "utf-8" + default: + return nil + } + } +}