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