-
Notifications
You must be signed in to change notification settings - Fork 24.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement Network.loadNetworkResource etc in C++ #44845
Conversation
This pull request was exported from Phabricator. Differential Revision: D54309633 |
This pull request was exported from Phabricator. Differential Revision: D54309633 |
Summary: Pull Request resolved: facebook#44845 ## Design - `NetworkIO` is an object owned by the `HostAgent`, created by `HostTarget` where it is given a scoped executor. - `HostAgent` passes most handling of CDP `Network.loadNetworkResource` through `NetworkIO`. - `NetworkIO.loadNetworkResource` creates and holds a shared_ptr to a `Stream` representing a single resource load, and owning received headers and data. A reference is held in a map `streams_` until an error or it is closed with `IO.close`. `delegate.networkRequest` is called with the `stream`, which it retains for the lifetime of the request, and uses its methods to call back with headers, data and errors. - Callbacks for `IO.read` requests are held by the `Stream` until the incoming data is complete or enough data is available to fill the request (an implementation choice to optimise for fewest round trips). Any incoming data or error causes any pending requests to be rechecked. ## Unimplemented platforms - Platforms may optionally implement `HostTargetDelegate.networkRequest` (as of this diff, none do). If they don't we report a CDP "not implemented" error, similar to the status quo where it was unimplemented by the C++ agent. Differential Revision: D54309633
5bc1c18
to
59688d5
Compare
Summary: Pull Request resolved: facebook#44845 ## Design - `NetworkIO` is an object owned by the `HostAgent`, created by `HostTarget` where it is given a scoped executor. - `HostAgent` passes most handling of CDP `Network.loadNetworkResource` through `NetworkIO`. - `NetworkIO.loadNetworkResource` creates and holds a shared_ptr to a `Stream` representing a single resource load, and owning received headers and data. A reference is held in a map `streams_` until an error or it is closed with `IO.close`. `delegate.networkRequest` is called with the `stream`, which it retains for the lifetime of the request, and uses its methods to call back with headers, data and errors. - Callbacks for `IO.read` requests are held by the `Stream` until the incoming data is complete or enough data is available to fill the request (an implementation choice to optimise for fewest round trips). Any incoming data or error causes any pending requests to be rechecked. ## Unimplemented platforms - Platforms may optionally implement `HostTargetDelegate.networkRequest` (as of this diff, none do). If they don't we report a CDP "not implemented" error, similar to the status quo where it was unimplemented by the C++ agent. Differential Revision: D54309633
59688d5
to
f9b7144
Compare
This pull request was exported from Phabricator. Differential Revision: D54309633 |
1 similar comment
This pull request was exported from Phabricator. Differential Revision: D54309633 |
Summary: Pull Request resolved: facebook#44845 ## Design - `NetworkIO` is an object owned by the `HostAgent`, created by `HostTarget` where it is given a scoped executor. - `HostAgent` passes most handling of CDP `Network.loadNetworkResource` through `NetworkIO`. - `NetworkIO.loadNetworkResource` creates and holds a shared_ptr to a `Stream` representing a single resource load, and owning received headers and data. A reference is held in a map `streams_` until an error or it is closed with `IO.close`. `delegate.networkRequest` is called with the `stream`, which it retains for the lifetime of the request, and uses its methods to call back with headers, data and errors. - Callbacks for `IO.read` requests are held by the `Stream` until the incoming data is complete or enough data is available to fill the request (an implementation choice to optimise for fewest round trips). Any incoming data or error causes any pending requests to be rechecked. ## Unimplemented platforms - Platforms may optionally implement `HostTargetDelegate.networkRequest` (as of this diff, none do). If they don't we report a CDP "not implemented" error, similar to the status quo where it was unimplemented by the C++ agent. Differential Revision: D54309633
f9b7144
to
5601798
Compare
Summary: Pull Request resolved: facebook#44845 ## Design - `NetworkIO` is an object owned by the `HostAgent`, created by `HostTarget` where it is given a scoped executor. - `HostAgent` passes most handling of CDP `Network.loadNetworkResource` through `NetworkIO`. - `NetworkIO.loadNetworkResource` creates and holds a shared_ptr to a `Stream` representing a single resource load, and owning received headers and data. A reference is held in a map `streams_` until an error or it is closed with `IO.close`. `delegate.networkRequest` is called with the `stream`, which it retains for the lifetime of the request, and uses its methods to call back with headers, data and errors. - Callbacks for `IO.read` requests are held by the `Stream` until the incoming data is complete or enough data is available to fill the request (an implementation choice to optimise for fewest round trips). Any incoming data or error causes any pending requests to be rechecked. ## Unimplemented platforms - Platforms may optionally implement `HostTargetDelegate.networkRequest` (as of this diff, none do). If they don't we report a CDP "not implemented" error, similar to the status quo where it was unimplemented by the C++ agent. Differential Revision: D54309633
This pull request was exported from Phabricator. Differential Revision: D54309633 |
5601798
to
a94bf55
Compare
This pull request has been merged in 193cdc3. |
This pull request was successfully merged by @robhogan in 193cdc3. When will my fix make it into a release? | How to file a pick request? |
Summary:
Design
NetworkIOAgent
is owned by theHostAgent
.NetworkIOAgent
is passed any CDP requests not handled by theHostAgent
itself, and before delegating toInstanceAgent
.Network.loadNetworkResource
IO.read
IO.close
NetworkIOAgent.loadNetworkResource
creates aStream
corresponding to a single resource download/upload. A reference is held in a mapstreams_
until an error, the agent is disconnected (destroyed) or it is discarded by the frontend withIO.close
.delegate.loadNetworkResource
is called with astream
-scoped executor, which it uses to call back with headers, data and errors.IO.read
requests are held by theStream
until the incoming data is complete or enough data is available to fill the request (an implementation choice to optimise for fewest round trips). Any incoming data or error causes any pending requests to be rechecked.{F1719616688}
Unimplemented platforms
HostTargetDelegate.networkRequest
(as of this diff, none do). If they don't we report a CDP "not implemented" error, similar to the status quo where it was unimplemented by the C++ agent.Changelog:
[General][Added] Debugging: implement common C++ layer of CDP
Network.loadNetworkResource
Differential Revision: D54309633