blob: fd2dace4d9d781c9b279afdec9d63c490e45cf8c [file] [log] [blame] [edit]
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use std::net::TcpStream;
use std::sync::{Arc, Mutex};
use devtools_traits::NetworkEvent;
use serde::Serialize;
use crate::actor::ActorRegistry;
use crate::actors::network_event::NetworkEventActor;
use crate::actors::watcher::WatcherActor;
use crate::resource::{ResourceArrayType, ResourceAvailable};
#[derive(Clone, Serialize)]
pub struct Cause {
#[serde(rename = "type")]
pub type_: String,
#[serde(rename = "loadingDocumentUri")]
pub loading_document_uri: Option<String>,
}
pub(crate) fn handle_network_event(
actors: Arc<Mutex<ActorRegistry>>,
netevent_actor_name: String,
mut connections: Vec<TcpStream>,
network_event: NetworkEvent,
) {
let mut actors = actors.lock().unwrap();
let actor = actors.find_mut::<NetworkEventActor>(&netevent_actor_name);
let watcher_name = actor.watcher_name.clone();
match network_event {
NetworkEvent::HttpRequest(httprequest) => {
actor.add_request(httprequest);
let event_actor = actor.event_actor();
let resource_updates = actor.resource_updates();
let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
for stream in &mut connections {
watcher_actor.resource_array(
event_actor.clone(),
"network-event".to_string(),
ResourceArrayType::Available,
stream,
);
// Also push initial resource update (request headers, cookies)
watcher_actor.resource_array(
resource_updates.clone(),
"network-event".to_string(),
ResourceArrayType::Updated,
stream,
);
}
},
NetworkEvent::HttpRequestUpdate(httprequest) => {
actor.add_request(httprequest);
let resource = actor.resource_updates();
let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
for stream in &mut connections {
watcher_actor.resource_array(
resource.clone(),
"network-event".to_string(),
ResourceArrayType::Updated,
stream,
);
}
},
NetworkEvent::HttpResponse(httpresponse) => {
// Store the response information in the actor
actor.add_response(httpresponse);
let resource = actor.resource_updates();
let watcher_actor = actors.find::<WatcherActor>(&watcher_name);
for stream in &mut connections {
watcher_actor.resource_array(
resource.clone(),
"network-event".to_string(),
ResourceArrayType::Updated,
stream,
);
}
},
}
}