devtools/
network_handler.rs1use std::sync::Arc;
6
7use devtools_traits::NetworkEvent;
8use serde::Serialize;
9
10use crate::actor::{ActorEncode, ActorRegistry};
11use crate::actors::network_event::NetworkEventActor;
12use crate::actors::watcher::WatcherActor;
13use crate::protocol::DevtoolsConnection;
14use crate::resource::{ResourceArrayType, ResourceAvailable};
15
16#[derive(Clone, Serialize)]
17#[serde(rename_all = "camelCase")]
18pub(crate) struct Cause {
19 #[serde(rename = "type")]
20 pub type_: String,
21 pub loading_document_uri: Option<String>,
22}
23
24pub(crate) fn handle_network_event(
25 registry: Arc<ActorRegistry>,
26 network_event_name: String,
27 mut connections: Vec<DevtoolsConnection>,
28 network_event: NetworkEvent,
29) {
30 let network_event_actor = registry.find::<NetworkEventActor>(&network_event_name);
31 let watcher_actor = registry.find::<WatcherActor>(&network_event_actor.watcher_name);
32
33 match network_event {
34 NetworkEvent::HttpRequest(httprequest) => {
35 network_event_actor.add_request(httprequest);
36 let msg = network_event_actor.encode(®istry);
37 let resource = network_event_actor.resource_updates(®istry);
38
39 for stream in &mut connections {
40 watcher_actor.resource_array(
41 msg.clone(),
42 "network-event".to_string(),
43 ResourceArrayType::Available,
44 stream,
45 );
46
47 watcher_actor.resource_array(
49 resource.clone(),
50 "network-event".to_string(),
51 ResourceArrayType::Updated,
52 stream,
53 );
54 }
55 },
56
57 NetworkEvent::HttpRequestUpdate(httprequest) => {
58 network_event_actor.add_request(httprequest);
59 let resource = network_event_actor.resource_updates(®istry);
60
61 for stream in &mut connections {
62 watcher_actor.resource_array(
63 resource.clone(),
64 "network-event".to_string(),
65 ResourceArrayType::Updated,
66 stream,
67 );
68 }
69 },
70 NetworkEvent::HttpResponse(httpresponse) => {
71 network_event_actor.add_response(httpresponse);
72 let resource = network_event_actor.resource_updates(®istry);
73
74 for stream in &mut connections {
75 watcher_actor.resource_array(
76 resource.clone(),
77 "network-event".to_string(),
78 ResourceArrayType::Updated,
79 stream,
80 );
81 }
82 },
83 NetworkEvent::SecurityInfo(update) => {
84 network_event_actor.add_security_info(update.security_info);
85 let resource = network_event_actor.resource_updates(®istry);
86
87 for stream in &mut connections {
88 watcher_actor.resource_array(
89 resource.clone(),
90 "network-event".to_string(),
91 ResourceArrayType::Updated,
92 stream,
93 );
94 }
95 },
96 }
97}