mirror of
https://github.com/servo/servo.git
synced 2025-08-03 20:50:07 +01:00
devtools: refactor network related (#36093)
* devtools: extract network related into new file Signed-off-by: jerensl <54782057+jerensl@users.noreply.github.com> * devtools: fix missing license and linting error Signed-off-by: jerensl <54782057+jerensl@users.noreply.github.com> * fixup! devtools: extract network related into new file Signed-off-by: jerensl <54782057+jerensl@users.noreply.github.com> --------- Signed-off-by: jerensl <54782057+jerensl@users.noreply.github.com>
This commit is contained in:
parent
cb5dd3172a
commit
02375809b0
2 changed files with 175 additions and 143 deletions
|
@ -37,13 +37,14 @@ use crate::actors::browsing_context::BrowsingContextActor;
|
||||||
use crate::actors::console::{ConsoleActor, Root};
|
use crate::actors::console::{ConsoleActor, Root};
|
||||||
use crate::actors::device::DeviceActor;
|
use crate::actors::device::DeviceActor;
|
||||||
use crate::actors::framerate::FramerateActor;
|
use crate::actors::framerate::FramerateActor;
|
||||||
use crate::actors::network_event::{EventActor, NetworkEventActor, ResponseStartMsg};
|
use crate::actors::network_event::NetworkEventActor;
|
||||||
use crate::actors::performance::PerformanceActor;
|
use crate::actors::performance::PerformanceActor;
|
||||||
use crate::actors::preference::PreferenceActor;
|
use crate::actors::preference::PreferenceActor;
|
||||||
use crate::actors::process::ProcessActor;
|
use crate::actors::process::ProcessActor;
|
||||||
use crate::actors::root::RootActor;
|
use crate::actors::root::RootActor;
|
||||||
use crate::actors::thread::ThreadActor;
|
use crate::actors::thread::ThreadActor;
|
||||||
use crate::actors::worker::{WorkerActor, WorkerType};
|
use crate::actors::worker::{WorkerActor, WorkerType};
|
||||||
|
use crate::network_handler::handle_network_event;
|
||||||
use crate::protocol::JsonPacketStream;
|
use crate::protocol::JsonPacketStream;
|
||||||
|
|
||||||
mod actor;
|
mod actor;
|
||||||
|
@ -69,6 +70,7 @@ mod actors {
|
||||||
pub mod watcher;
|
pub mod watcher;
|
||||||
pub mod worker;
|
pub mod worker;
|
||||||
}
|
}
|
||||||
|
mod network_handler;
|
||||||
mod protocol;
|
mod protocol;
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
|
||||||
|
@ -77,45 +79,6 @@ enum UniqueId {
|
||||||
Worker(WorkerId),
|
Worker(WorkerId),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
struct NetworkEventMsg {
|
|
||||||
from: String,
|
|
||||||
#[serde(rename = "type")]
|
|
||||||
type_: String,
|
|
||||||
event_actor: EventActor,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
struct NetworkEventUpdateMsg {
|
|
||||||
from: String,
|
|
||||||
#[serde(rename = "type")]
|
|
||||||
type_: String,
|
|
||||||
update_type: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
struct EventTimingsUpdateMsg {
|
|
||||||
total_time: u64,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
struct SecurityInfoUpdateMsg {
|
|
||||||
state: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
|
||||||
#[serde(rename_all = "camelCase")]
|
|
||||||
struct ResponseStartUpdateMsg {
|
|
||||||
from: String,
|
|
||||||
#[serde(rename = "type")]
|
|
||||||
type_: String,
|
|
||||||
update_type: String,
|
|
||||||
response: ResponseStartMsg,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Serialize)]
|
#[derive(Serialize)]
|
||||||
pub struct EmptyReplyMsg {
|
pub struct EmptyReplyMsg {
|
||||||
pub from: String,
|
pub from: String,
|
||||||
|
@ -487,7 +450,7 @@ impl DevtoolsInstance {
|
||||||
|
|
||||||
fn handle_network_event(
|
fn handle_network_event(
|
||||||
&mut self,
|
&mut self,
|
||||||
mut connections: Vec<TcpStream>,
|
connections: Vec<TcpStream>,
|
||||||
pipeline_id: PipelineId,
|
pipeline_id: PipelineId,
|
||||||
request_id: String,
|
request_id: String,
|
||||||
network_event: NetworkEvent,
|
network_event: NetworkEvent,
|
||||||
|
@ -497,109 +460,14 @@ impl DevtoolsInstance {
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
let netevent_actor_name = self.find_network_event_actor(request_id);
|
let netevent_actor_name = self.find_network_event_actor(request_id);
|
||||||
let mut actors = self.actors.lock().unwrap();
|
|
||||||
let actor = actors.find_mut::<NetworkEventActor>(&netevent_actor_name);
|
|
||||||
|
|
||||||
match network_event {
|
handle_network_event(
|
||||||
NetworkEvent::HttpRequest(httprequest) => {
|
Arc::clone(&self.actors),
|
||||||
// Store the request information in the actor
|
console_actor_name,
|
||||||
actor.add_request(httprequest);
|
netevent_actor_name,
|
||||||
|
connections,
|
||||||
// Send a networkEvent message to the client
|
network_event,
|
||||||
let msg = NetworkEventMsg {
|
)
|
||||||
from: console_actor_name,
|
|
||||||
type_: "networkEvent".to_owned(),
|
|
||||||
event_actor: actor.event_actor(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_json_packet(&msg);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
NetworkEvent::HttpResponse(httpresponse) => {
|
|
||||||
// Store the response information in the actor
|
|
||||||
actor.add_response(httpresponse);
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "requestHeaders".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &actor.request_headers());
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "requestCookies".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &actor.request_cookies());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Send a networkEventUpdate (responseStart) to the client
|
|
||||||
let msg = ResponseStartUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "responseStart".to_owned(),
|
|
||||||
response: actor.response_start(),
|
|
||||||
};
|
|
||||||
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_json_packet(&msg);
|
|
||||||
}
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "eventTimings".to_owned(),
|
|
||||||
};
|
|
||||||
let extra = EventTimingsUpdateMsg {
|
|
||||||
total_time: actor.total_time().as_millis() as u64,
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &extra);
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "securityInfo".to_owned(),
|
|
||||||
};
|
|
||||||
let extra = SecurityInfoUpdateMsg {
|
|
||||||
state: "insecure".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &extra);
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "responseContent".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &actor.response_content());
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name.clone(),
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "responseCookies".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &actor.response_cookies());
|
|
||||||
}
|
|
||||||
|
|
||||||
let msg = NetworkEventUpdateMsg {
|
|
||||||
from: netevent_actor_name,
|
|
||||||
type_: "networkEventUpdate".to_owned(),
|
|
||||||
update_type: "responseHeaders".to_owned(),
|
|
||||||
};
|
|
||||||
for stream in &mut connections {
|
|
||||||
let _ = stream.write_merged_json_packet(&msg, &actor.response_headers());
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find the name of NetworkEventActor corresponding to request_id
|
// Find the name of NetworkEventActor corresponding to request_id
|
||||||
|
|
164
components/devtools/network_handler.rs
Normal file
164
components/devtools/network_handler.rs
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
/* 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::{EventActor, NetworkEventActor, ResponseStartMsg};
|
||||||
|
use crate::protocol::JsonPacketStream;
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct NetworkEventMsg {
|
||||||
|
from: String,
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
type_: String,
|
||||||
|
event_actor: EventActor,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct NetworkEventUpdateMsg {
|
||||||
|
from: String,
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
type_: String,
|
||||||
|
update_type: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct ResponseStartUpdateMsg {
|
||||||
|
from: String,
|
||||||
|
#[serde(rename = "type")]
|
||||||
|
type_: String,
|
||||||
|
update_type: String,
|
||||||
|
response: ResponseStartMsg,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
struct EventTimingsUpdateMsg {
|
||||||
|
total_time: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize)]
|
||||||
|
struct SecurityInfoUpdateMsg {
|
||||||
|
state: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn handle_network_event(
|
||||||
|
actors: Arc<Mutex<ActorRegistry>>,
|
||||||
|
console_actor_name: String,
|
||||||
|
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);
|
||||||
|
|
||||||
|
match network_event {
|
||||||
|
NetworkEvent::HttpRequest(httprequest) => {
|
||||||
|
// Store the request information in the actor
|
||||||
|
actor.add_request(httprequest);
|
||||||
|
|
||||||
|
// Send a networkEvent message to the client
|
||||||
|
let msg = NetworkEventMsg {
|
||||||
|
from: console_actor_name,
|
||||||
|
type_: "networkEvent".to_owned(),
|
||||||
|
event_actor: actor.event_actor(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_json_packet(&msg);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
NetworkEvent::HttpResponse(httpresponse) => {
|
||||||
|
// Store the response information in the actor
|
||||||
|
actor.add_response(httpresponse);
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "requestHeaders".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &actor.request_headers());
|
||||||
|
}
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "requestCookies".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &actor.request_cookies());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send a networkEventUpdate (responseStart) to the client
|
||||||
|
let msg = ResponseStartUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "responseStart".to_owned(),
|
||||||
|
response: actor.response_start(),
|
||||||
|
};
|
||||||
|
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_json_packet(&msg);
|
||||||
|
}
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "eventTimings".to_owned(),
|
||||||
|
};
|
||||||
|
let extra = EventTimingsUpdateMsg {
|
||||||
|
total_time: actor.total_time().as_millis() as u64,
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "securityInfo".to_owned(),
|
||||||
|
};
|
||||||
|
let extra = SecurityInfoUpdateMsg {
|
||||||
|
state: "insecure".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &extra);
|
||||||
|
}
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "responseContent".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &actor.response_content());
|
||||||
|
}
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name.clone(),
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "responseCookies".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &actor.response_cookies());
|
||||||
|
}
|
||||||
|
|
||||||
|
let msg = NetworkEventUpdateMsg {
|
||||||
|
from: netevent_actor_name,
|
||||||
|
type_: "networkEventUpdate".to_owned(),
|
||||||
|
update_type: "responseHeaders".to_owned(),
|
||||||
|
};
|
||||||
|
for stream in &mut connections {
|
||||||
|
let _ = stream.write_merged_json_packet(&msg, &actor.response_headers());
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue