Files
react-native/packages/react-native/ReactCommon/cxxreact
Moti Zilberman 97723efc8d Track domain enable/disable bit in shared state across Agents (#42746)
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
2024-02-01 11:03:41 -08:00
..
2023-09-15 01:17:55 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00
2023-09-04 10:55:18 -07:00