Die HoneyBar braucht kein 'unsafe-inline' mehr

Ihre Stile hingen als <style> im Shadow DOM, und Markup faellt unter die
CSP der Gastgeber-App: Jede fremde App musste deshalb style-src
'unsafe-inline' erlauben, sonst stand die HoneyBar schwarz auf schwarz da.

Jetzt kommen sie als konstruiertes Stylesheet ueber die CSSOM herein, die
keine CSP kennt. Damit braucht die App gar keine style-src-Erlaubnis mehr
-- auch keine fuer die HoneyOS-Domain, was der geplante Weg ueber eine
zweite Datei und <link> gekostet haette, samt zweiter Anfrage.

Der Strich zum Wiederausklappen hat seinen eigenen Shadow-Root und geht
denselben Weg. Der Rueckfall fuer alte Browser laeuft nach innerHTML,
sonst raeumt das Markup ihn gleich wieder weg.

Gemessen an einer nachgebauten App mit style-src 'self': Leiste bernstein,
32 px, Strich mit Verlauf, keine CSP-Meldung.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
marcandClaude Opus 5 committed 2026-09-11 13:50:06 +02:00
1 parent 8ca16aec84
commit 3b47003492
4 files changed
+97 -33

No files matched your search

+21
View File
@@ -204,3 +204,24 @@ func TestWappenIstUeberallDasselbe(t *testing.T) {
}
}
}
// Die HoneyBar darf ihre Stile nicht als <style>-Element mitbringen: Markup
// faellt unter die CSP der fremden App, ueber die CSSOM gesetzte Stile nicht.
// Mit einem <style> muesste jede Gastgeber-App wieder 'unsafe-inline' erlauben,
// und ohne das stuende die HoneyBar dort schwarz auf schwarz — genau so war es
// bis zum 11.09.2026. Der Rueckfall fuer alte Browser baut das Element per
// createElement, nicht im Markup; deshalb sucht der Test nach dem Tag.
func TestHoneyBarBringtKeinStyleElementMit(t *testing.T) {
b, err := os.ReadFile("web/honeybar/honeybar.js")
if err != nil {
t.Fatal(err)
}
src := string(b)
if strings.Contains(src, "<style>") || strings.Contains(src, "<style ") {
t.Error("honeybar.js enthaelt ein <style>-Element im Markup — das braucht 'unsafe-inline' in der fremden App")
}
if !strings.Contains(src, "adoptedStyleSheets") {
t.Error("honeybar.js setzt keine adoptedStyleSheets mehr — wie kommen die Stile in den Shadow DOM?")
}
}