Wrapped CEF Browser handle stored in HostState.browsers. Replaces the
raw Mutex<HashMap<String, Browser>> at state.rs::AppState.browsers
at PR #2 step e.
Phase B.5 (window_meta step d) — pre-create handoff. Caller
(drag.rs::tear_off, commands/window.rs::open_new_window,
window_pool.rs::spawn_pool_window, pane/creation.rs) pushes
one entry per window CEF is about to create; client.rs::on_after_created
pops the head entry and uses kind for the Subwindow
taskbar-hide branch + as the payload for ReportWindowOpened.
Pre-warmed window pool state. Replaces three separate fields on
AppState: window_pool: Mutex<VecDeque<String>>,
unpromoted_pool_labels: Mutex<HashSet<String>>, and
window_pool_respawn_in_flight: AtomicBool. PR #3 migrates each
caller through the a→e ratchet.
A request to create a top-level window. Pushed to
HostState.top_level_creation.queue via EnqueueTopLevelWindow.
Carries the full spec the effect handler needs to call
ui_tasks::post_create_window.
Distinguishes top-level CEF Browsers (full-instance windows + pool
windows) from pane CEF Browsers (children of a top-level). Determines
taskbar treatment, lifecycle ownership, etc.
Lifecycle state of a browser pane (the defwidget@browser widget). Held
inside HostState.browser_panes keyed by block_id. Mirrors the existing
PaneStateMachine::BrowserPaneLifecycle (pane/lifecycle.rs:28); the existing
type stays during PR #2’s a→e migration. PR #2 step e deletes the
pane/lifecycle.rs version and migrates all readers to this one.
Side-effect descriptor emitted by reducer arms. Carried inside
HostEvent::Effect(EffectKind). The effects executor in
AppState::host_dispatch_with_effects dispatches each kind to the
appropriate imperative handler (e.g., posting a CEF UI task).
Host process quit lifecycle. Replaces is_quitting: AtomicBool at
state.rs::AppState. Three states; transitions are monotonic
(Running → Draining → Quit, no regression).