/* 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, } pub(crate) fn handle_network_event( actors: Arc>, netevent_actor_name: String, mut connections: Vec, network_event: NetworkEvent, ) { let mut actors = actors.lock().unwrap(); let actor = actors.find_mut::(&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::(&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::HttpResponse(httpresponse) => { // Store the response information in the actor actor.add_response(httpresponse); let resource = actor.resource_updates(); let watcher_actor = actors.find::(&watcher_name); for stream in &mut connections { watcher_actor.resource_array( resource.clone(), "network-event".to_string(), ResourceArrayType::Updated, stream, ); } }, } }