001Notes
Website View, Automation Signals, and the Shared Browser
On this page13
How Website View policy, WebDriver signaling, launch-time switches, and an authenticated broker connect local applications to one visible Chromium instance.
Article details
- Status
- Building Publicly
- Subcategory
- Hardened Chromium
- Last reviewed
- 7 Sept 2026
13 sections
The WebDriver expectation
The switch crosses a process boundary
sequenceDiagram
participant L as Launcher/service
participant B as Browser process
participant RPH as RenderProcessHostImpl
participant R as Renderer process
participant N as Blink Navigator
L->>B: --hardened-webdriver-mode=hide|report
B->>RPH: Build renderer command line
RPH->>R: Propagate hardened switch
N->>R: Read current-process command line
R-->>N: false for hide; Chromium result for report
Website View is a profile document
{
"schemaVersion": 3,
"default": {
"cameraSource": "fake",
"microphoneSource": "fake",
"locationSource": "fake",
"persona": {},
"exposures": {
"automation": "hide"
}
},
"rules": [
{
"origin": "https://example.test",
"cameraSource": "real"
}
]
}
Exact-origin resolution
flowchart TD
URL[Requesting document URL] --> Origin[Canonical scheme + host + effective port]
Origin --> Match{Exact rule exists?}
Match -->|yes| Merge[Merge rule over profile default]
Match -->|no| Base[Use profile default]
Merge --> Enforce[Use fields supported by this build]
Base --> Enforce
Enforce --> Warn[Report unsupported configured fields]
Settings UI without web filesystem access
What Website View enforces today
| Policy area | Current state | Enforcement point |
|---|---|---|
| Default camera source | Enforced | Media permission/device selection |
| Exact-origin camera source | Enforced | Content source lookup and media enumeration |
| Default microphone source | Enforced | Media permission/device selection |
| Exact-origin microphone source | Enforced | Content source lookup and media enumeration |
| Default location source | Enforced | Geolocation service routing |
| Exact-origin location source | Enforced | Content source lookup |
exposures.automation | Enforced at startup | Launcher, renderer switch, Blink Navigator |
| Non-zero loopback CDP | Enforced at startup | Launcher/service validation |
| Persona fields | Stored, warning | No matching native hooks yet |
| Canvas/WebGL/audio normalization | Stored, warning | No matching native hooks yet |
| WebRTC/font/client-hint/high-entropy exposure keys | Stored, warning | No matching native hooks yet |
Why the broker exists
flowchart LR
subgraph Clients[Local applications]
A[App A]
B[App B]
end
A -->|app identity + secret| Broker
B -->|app identity + secret| Broker
Service[Service owner/health manager] --> Broker[Loopback broker]
Service --> Browser[One visible Chromium]
Broker -->|private CDP| Browser
Browser --> TA[App A tab]
Browser --> TB[App B tab]
Broker --> Store[Jobs, events, schemas, outputs]