mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/42746 Changelog: [Internal] Formally introduces the concept of "session state" to the modern CDP backend, with the simplest possible implementation: * `PageTargetSession` has a mutable `SessionState` member. * All agents receive the same `SessionState&` in their constructor (with `SessionState`'s lifetime being the caller's responsibility). * It's only legal to read/write to `SessionState` on the thread where requests are handled and Agents are created (the "main" thread). * Agents are expected to play nice and not clobber each other's state in `SessionState`; this is *not* protected with visibility or `const`ness, however. * We'll probably want to come up with some API-level mechanism to control this as the complexity of our agents grows. ## Current use case: `<Domain>.enable` The first use case for session state is to let `PageAgent` manage the `Log.enable` and `Runtime.enable` state for the session. This will allow agents created later in the session (or recreated as part of a reload) to emit Log and Runtime notifications without waiting for additional `enable` messages (that the client is not required to send). We'll likely want to generalise this design to arbitrary domains in some way (e.g. add a top-level domain router that agents register with explicitly?) but I went with the simplest implementation for our current needs. NOTE: The CDP spec doesn't state this explicitly, but it's clear from Chrome's behaviour that a `<Domain>.enable` command is intended to be session-scoped and survive reloads. ## Future use case: Instance/Runtime state persistence The `<Domain>.enable` use case could have been solved with passing *immutable* state to Agents (`const SessionState&`). We make the state mutable in anticipation of `HermesRuntimeAgent` needing to store its own state in the session down the line, which we know is going to be needed in order for breakpoints to survive reloads. Agents that never need to mutate state SHOULD only store this as a const reference. Reviewed By: huntie Differential Revision: D53006916 fbshipit-source-id: a0443c507294faa94efdf25b2f1670129774dc78