Browser

Live-streamed remote browser session with multi-tab management and WebRTC / JPEG / DOM transports. Session discovery and creation live in the browser overview; the focused panel uses a single WorkspaceShell surface with a clickable Browser breadcrumb, tabs-first header chrome, and a stable connection/status strip.

binds_to: chromelessdensity: comfortablesource: portal/src/canvas/browser_panel.rs

Live

The real panel component, mounted here over fixture data — the same shipped chrome the workspace renders, not a sketch.

browser
Loading session…

New Tab

Sketch

Structural preview of the panel chrome. The browser panel renders the real BrowserChrome primitive at miniature scale; the other variants are CSS shape silhouettes. Either way the composition tree below is the authoritative description of what's inside.

Browserportal/src/canvas/browser_panel.rsexisting

States

  • emptyNo active chromeless session — return to overview to select one
  • loadingConnecting to browser session...
  • populatedMulti-tab session with active screencast
  • connection_errorBrowser session disconnected — reconnect to resume
  • overview_returnBrowser breadcrumb returns to overview

Composition

Click any component name to jump to its component-page entry.

WorkspaceShellouterProvides the top/body/status shell shared across focused workbench panels. Single role=application landmark for screen readers; no local browser-session rail.
WorkspaceTopchromeHosts the breadcrumb and close action. Clicking the Browser ancestor returns to the browser overview.
WorkspaceBreadcrumbchromeMiddle-ellipsis nav with optional ancestor activation; Browser is actionable, the active session leaf is aria-current.
WorkspaceBodycontentHosts tabs-first header chrome, address bar, and live viewport for the active chromeless/cloud session.
PanelEmptyStatestatePre-session empty body that tells the user to return to the overview to create or select a chromeless session.
BrowserScreencastWebRtccontentLive WebRTC video track when the underlying element declares the framesink-capture capability (chromeless). Element-agnostic dispatch via triform_types::has_capability — no hardcoded element_type.
BrowserScreencastcontentJPEG-frame fallback transport for elements without the framesink-capture capability. Resolved at mount-time from Transport::Auto. (The DOM-mirror transport is wired by the DomStreamClient service, not a view component, so it is not a composition node.)
WorkspaceStatuschromeBottom chrome strip — connection state pip + counter pill (tab count) + last-activity timestamp. Stays stable for the active session.
CounterPillchromeRight-slot tab counter (e.g. '3 tabs'). One pill per session metric the consumer wants surfaced.
BrowserStatusChipchromeGreen / amber / red connection-state pip keyed to BrowserStatus::{Connected, Connecting, Disconnected}, rendered inside BrowserStatusBar. ARIA-live so disconnect events announce automatically.

Uses Components

Flat list of every component referenced — verifiable against the composition tree by the future generator audit.