feat: CanvasRenderer sandboxe + protocole postMessage (#21) #125

Closed
charles wants to merge 3 commits from feat/21-canvas-renderer into main
Owner

Closes #21

Ce qui est implemente

Modele Rust pur pour le canvas agent, sans dependance webkit2gtk directe. Le backend WebView sera branche via le trait CanvasBackend quand l'infrastructure GTK sera prete.

Nouveaux types (crates/fractal-gtk/src/canvas.rs)

  • CanvasSize — dimensions clampees a MAX_CANVAS_WIDTH=640 / MAX_CANVAS_HEIGHT=480
  • CANVAS_CSPdefault-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; (pas de reseau, pas de JS externe)
  • CanvasToHost — protocole canvas -> host : Resize, Action, Ready
  • HostToCanvas — protocole host -> canvas : ThemeChanged, Data + helper to_js_post_message()
  • wrap_canvas_html(body_html) — injecte le CSP meta tag, le listener fractal-host-message et fractalSend()
  • RenderedCanvas — resultat de render_canvas(html, max_size)
  • CanvasBackend trait — render() + send_message(), Send + Sync
  • NoopCanvasBackend — stub pour tests / builds sans GTK
  • CanvasRenderer — point d'entree haut niveau avec canvas_enabled flag ; render_canvas() retourne une erreur si desactive

Modifications

  • Cargo.toml : ajout de serde et serde_json (workspace)
  • lib.rs : pub mod canvas + re-exports des types publics

Tests (7)

canvas_size_clamped_to_max, wrap_canvas_html_includes_csp, wrap_canvas_html_includes_body, render_canvas_disabled_returns_err, render_canvas_enabled_succeeds, host_to_canvas_js_post_message, canvas_to_host_serializes

Closes #21 ## Ce qui est implemente Modele Rust pur pour le canvas agent, sans dependance webkit2gtk directe. Le backend WebView sera branche via le trait `CanvasBackend` quand l'infrastructure GTK sera prete. ### Nouveaux types (`crates/fractal-gtk/src/canvas.rs`) - `CanvasSize` — dimensions clampees a `MAX_CANVAS_WIDTH=640` / `MAX_CANVAS_HEIGHT=480` - `CANVAS_CSP` — `default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:;` (pas de reseau, pas de JS externe) - `CanvasToHost` — protocole canvas -> host : `Resize`, `Action`, `Ready` - `HostToCanvas` — protocole host -> canvas : `ThemeChanged`, `Data` + helper `to_js_post_message()` - `wrap_canvas_html(body_html)` — injecte le CSP meta tag, le listener `fractal-host-message` et `fractalSend()` - `RenderedCanvas` — resultat de `render_canvas(html, max_size)` - `CanvasBackend` trait — `render()` + `send_message()`, `Send + Sync` - `NoopCanvasBackend` — stub pour tests / builds sans GTK - `CanvasRenderer` — point d'entree haut niveau avec `canvas_enabled` flag ; `render_canvas()` retourne une erreur si desactive ### Modifications - `Cargo.toml` : ajout de `serde` et `serde_json` (workspace) - `lib.rs` : `pub mod canvas` + re-exports des types publics ### Tests (7) `canvas_size_clamped_to_max`, `wrap_canvas_html_includes_csp`, `wrap_canvas_html_includes_body`, `render_canvas_disabled_returns_err`, `render_canvas_enabled_succeeds`, `host_to_canvas_js_post_message`, `canvas_to_host_serializes`
feat(fractal-gtk): expose canvas module in lib.rs (#21)
Some checks failed
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
a57896b794
charles closed this pull request 2026-04-06 02:13:28 +00:00
Some checks are pending
CI / cargo check (pull_request) Has been cancelled
CI / cargo test (pull_request) Has been cancelled
CI / clippy + rustfmt (pull_request) Has been cancelled
qa
Required

Pull request closed

Sign in to join this conversation.
No description provided.