Glossary

Terms used across all three tracks, with the precision the modules rely on. Where a definition is quoted or measured from the Chromium tree, the date is given — Chromium moves, and a stale definition is worse than none. See PROGRESS.md §7 for the verification log.


Browser architecture

Browser process — the privileged process. Owns UI, navigation, permissions, disk, cookies, and process allocation. Trusts nothing a renderer tells it.

Renderer process — sandboxed, hosts Blink and V8 for one or more same-site documents. Assumed to be compromised; this assumption generates most of Chromium's architecture.

GPU process — executes GL/Vulkan commands and runs the display compositor (viz). Isolated because graphics drivers are both fragile and a large attack surface.

Network service — owns sockets, TLS, and the HTTP cache. Renderers never hold a socket.

Blink — the rendering engine: HTML, DOM, CSS, style, layout, paint, events, Web APIs. Lives in third_party/blink/renderer. Not the same thing as "the renderer process".

V8 — the JavaScript and WebAssembly engine. A separate project. document is not a V8 concept; Node.js has V8 and no DOM.

cc — the compositor, in //cc. Runs in the renderer process, across the main thread and the compositor ("impl") thread. Not the GPU process.

viz — the display compositor, in the GPU process. Aggregates CompositorFrames from every renderer plus browser UI into the frame that is presented.

Mojo — Chromium's IPC system. A message pipe is a pair of endpoints; a .mojom file declares interfaces of messages; a Remote sends and a Receiver receives. Dispatch is a scheduled task, not a function call — ordering is guaranteed per pipe and not across pipes.

Associated interface — a Mojo interface sharing a pipe with a parent, which restores ordering between them. Seeing one usually means somebody was bitten by an ordering bug.


Process model (verified 2026-08-11, docs/process_model_and_site_isolation.md)

Site — scheme + eTLD+1 (https://example.com). Not an origin. a.example.com and b.example.com are the same site, because document.domain historically let them script each other synchronously.

SiteInfo — the security principal: what data an execution context may access.

SiteInstance — the principal instance, and the core unit of the process model. Any two documents with the same principal in the same browsing context group must share a process, because they have synchronous access to each other. Corresponds roughly (not exactly) to the HTML spec's agent cluster.

BrowsingInstance — the browsing context group: tabs and frames that can reach each other (window.opener, named targets, nested frames). rel="noopener" exists to keep a new page out of the group.

ProcessLock — the enforcement point. Restricts which sites may load in a RenderProcessHost and which data it may access. Granularity may be a site, an origin, a scheme, or "any site".

Site isolation — one renderer per site, including out-of-process iframes. Defends against a compromised renderer, not merely against script: after Spectre, "the data was never in that process" replaced "the checks stop it".

Rule of Two — code must not do all three of: process untrustworthy input, in an unsafe language, without a sandbox. Pick at most two. Explains most of Chromium's utility processes.


Rendering pipeline

Flat tree — the node tree with shadow content slotted in. Style and layout operate on this, not the node tree. Slot assignment does not change parentNode.

ComputedStyle — the fully-resolved property set for an element. Immutable and shared between elements that resolve identically; inline styles and unique selectors defeat the sharing.

RuleFeatureSet — the index built from stylesheets: for each feature (class, id, attribute, pseudo-class) it records what would need invalidating if that feature changed. Its entries are invalidation sets (descendant, sibling, nth, part/slotted), with a fallback to whole-subtree invalidation when precision is impossible.

invalidate: — a field in core/css/css_properties.json5 declaring, per property, which pipeline stage a change dirties. Measured 2026-08-11: 822 property entries, 311 declare it — 95 ["layout","paint"], 50 ["paint"], 34 ["layout"], 4 ["compositing"].

LayoutObject / LayoutBox — boxes participating in layout. Not one-per-element: display:none produces none, and anonymous boxes are synthesised.

ConstraintSpace — the immutable input to a layout algorithm (available size, fragmentation state, writing mode). Explicit inputs are what make layout results cacheable.

Fragment — an immutable geometry result. A box may produce several (pagination, multicol, inline splitting), which is why getClientRects() can return more than one rectangle.

Logical vs physical coordinates — layout thinks in inline/block, start/end; paint thinks in top/left. Code written physically breaks in RTL and vertical writing modes.

PrePaint — the phase that walks the layout tree to do paint invalidation and build paint property trees.

Display item — one recorded drawing command. Paint produces a recording, not pixels.

PaintChunk — "sequential display items that share a common property tree state". Change a property-tree node and the chunk's state changes while its contents do not — which is the entire transform/opacity fast path.

Property trees — four separate trees: transform, clip, effect, scroll. Separate so a scroll or a fade changes one node rather than re-recording the world.

Stacking context — an atomic unit of paint order. Created by opacity < 1, transform, filter, will-change, contain: paint, isolation, and others. Why opacity: 0.99 "fixes" z-index bugs.


Compositor (verified 2026-08-11, cc/README.md)

Layer / LayerImpl — the same concept on the main thread / the compositor thread. The type name tells you the thread.

Active tree — the layers and property trees used to submit a frame. Composited effects — scrolling, pinch, animation — are done by modifying the active tree, which is why they survive a blocked main thread.

Pending tree — the tree being rastered. Becomes active only when its tiles are ready, so half-rastered content is never shown.

CompositorFrame — a set of RenderPasses (lists of DrawQuads) plus metadata: instructions for drawing a scene, not pixels.

ElementID — a stable identifier across updates, used to attribute composited animations. The same role key plays in a reconciler.

Tile — a subdivision of a layer, rastered independently and prioritised by viewport proximity. Outrunning raster produces checkerboarding, which is deliberate: a consistent frame now beats a correct frame late.

Damage rect — the region that actually changed, so the GPU redraws only that.


Scheduling (verified 2026-08-11, platform/scheduler/TaskSchedulingInBlink.md)

Rendering opportunity — the point at which the browser runs rAF, observers, style, layout, paint, and commit. Not a task you can post.

Microtask checkpoint — drains the microtask queue exhaustively, including microtasks enqueued during the drain. Not a yield point: no rendering, no input.

PausingScopedPagePauser enters a nested run loop during alert(), print(), or a debugger breakpoint. No JavaScript runs.

Deferring — tasks are deferred for 2 seconds after a user gesture, on the bet that another gesture is coming.

Freezing — background pages are frozen after 5 minutes on mobile; on desktop by heuristics based on which APIs the page uses.

Throttling — currently applies to JS timers only (setTimeout/setInterval).

INP — Interaction to Next Paint = input delay + processing + presentation. Two of the three terms are not your handler.

LoAF — Long Animation Frames API; reports long frames with blockingDuration and a scripts[] attribution.


Object lifetime

Oilpan — Blink's garbage collector, built on V8's cppgc. Heaps are per-thread; Node, CSSValue, and LayoutObject get dedicated typed spaces. Marking and sweeping are concurrent.

Unified heap — one collector tracing both the C++ and JavaScript heaps, which is what makes cross-heap cycles collectable. Supersedes "wrapper tracing"; TraceWrapperMember<T> no longer exists (verified 2026-08-11).

Member<T> / Persistent<T> / WeakMember<T> — graph edge / root from non-GC code / weak edge. An object's Trace() method is the authoritative list of what it keeps alive.

ActiveScriptWrappable — keeps an object alive while it has pending activity, because reachability alone would collect a pending XMLHttpRequest.

Wrapper — the JS object for a C++ DOM object. Created lazily, on first observation by script, and must be stable so expandos and === survive.

World (DOMWrapperWorld) — an isolated JS view of the same DOM, used for extension content scripts. Different wrappers, different expandos: a real security boundary.


Framework internals

Reconciliation — computing the minimal DOM operations between two descriptions of a UI.

Key — author-supplied identity for a list child. The runtime cannot infer it: [A,B,C] → [B,C] is ambiguous between "deleted A" and "renamed everything".

Fiber — an explicit, heap-allocated work-loop node (child / sibling / return) replacing the call stack, so render work can be paused, inspected, resumed, and discarded.

Render phase / commit phase — interruptible and side-effect-free / atomic and DOM-touching. Two statements of one requirement: discardable work must have done nothing, and output must be applied all at once.

Tearing — one render observing two different values of external mutable state. The reason useSyncExternalStore exists.

Glitch — a reactive system transiently computing a value from inconsistent inputs, e.g. a diamond a → b → d, a → c → d evaluated in the wrong order.

Invalidation set / dependency set — the same idea in a browser and in a reactive runtime: an index from "what changed" to "what must be recomputed".

Patch flag — a compiler-emitted annotation of which parts of a node can change, so the runtime skips comparisons. Compile-time knowledge substituting for runtime work.

Author-supplied guarantee — a promise the runtime cannot derive, which unlocks an otherwise impossible optimisation: key, {passive: true}, contain, sideEffects, aria-setsize, Origin-Agent-Cluster. This pattern recurs across every layer of the stack.