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:
1 parent
8ca16aec84
commit
3b47003492
4 files changed
+97
-33
No files matched your search
@@ -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?")
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user