aboutsummaryrefslogtreecommitdiffstats
path: root/components/devtools/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/devtools/lib.rs')
-rw-r--r--components/devtools/lib.rs45
1 files changed, 28 insertions, 17 deletions
diff --git a/components/devtools/lib.rs b/components/devtools/lib.rs
index 62238c656ee..28c6675da42 100644
--- a/components/devtools/lib.rs
+++ b/components/devtools/lib.rs
@@ -127,6 +127,9 @@ pub fn start_server(port: u16, embedder: EmbedderProxy) -> Sender<DevtoolsContro
sender
}
+#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
+pub(crate) struct StreamId(u32);
+
fn run_server(
sender: Sender<DevtoolsControlMsg>,
receiver: Receiver<DevtoolsControlMsg>,
@@ -188,22 +191,25 @@ fn run_server(
let mut actor_workers: HashMap<WorkerId, String> = HashMap::new();
/// Process the input from a single devtools client until EOF.
- fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream) {
+ fn handle_client(actors: Arc<Mutex<ActorRegistry>>, mut stream: TcpStream, id: StreamId) {
debug!("connection established to {}", stream.peer_addr().unwrap());
{
let actors = actors.lock().unwrap();
let msg = actors.find::<RootActor>("root").encodable();
- stream.write_json_packet(&msg);
+ if let Err(e) = stream.write_json_packet(&msg) {
+ warn!("Error writing response: {:?}", e);
+ return;
+ }
}
'outer: loop {
match stream.read_json_packet() {
Ok(Some(json_packet)) => {
- if let Err(()) = actors
- .lock()
- .unwrap()
- .handle_message(json_packet.as_object().unwrap(), &mut stream)
- {
+ if let Err(()) = actors.lock().unwrap().handle_message(
+ json_packet.as_object().unwrap(),
+ &mut stream,
+ id,
+ ) {
debug!("error: devtools actor stopped responding");
let _ = stream.shutdown(Shutdown::Both);
break 'outer;
@@ -219,6 +225,8 @@ fn run_server(
},
}
}
+
+ actors.lock().unwrap().cleanup(id);
}
fn handle_framerate_tick(actors: Arc<Mutex<ActorRegistry>>, actor_name: String, tick: f64) {
@@ -451,7 +459,7 @@ fn run_server(
eventActor: actor.event_actor(),
};
for stream in &mut connections {
- stream.write_json_packet(&msg);
+ let _ = stream.write_json_packet(&msg);
}
},
NetworkEvent::HttpResponse(httpresponse) => {
@@ -464,7 +472,7 @@ fn run_server(
updateType: "requestHeaders".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &actor.request_headers());
+ let _ = stream.write_merged_json_packet(&msg, &actor.request_headers());
}
let msg = NetworkEventUpdateMsg {
@@ -473,7 +481,7 @@ fn run_server(
updateType: "requestCookies".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &actor.request_cookies());
+ let _ = stream.write_merged_json_packet(&msg, &actor.request_cookies());
}
//Send a networkEventUpdate (responseStart) to the client
@@ -485,7 +493,7 @@ fn run_server(
};
for stream in &mut connections {
- stream.write_json_packet(&msg);
+ let _ = stream.write_json_packet(&msg);
}
let msg = NetworkEventUpdateMsg {
from: netevent_actor_name.clone(),
@@ -496,7 +504,7 @@ fn run_server(
totalTime: actor.total_time(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &extra);
+ let _ = stream.write_merged_json_packet(&msg, &extra);
}
let msg = NetworkEventUpdateMsg {
@@ -508,7 +516,7 @@ fn run_server(
state: "insecure".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &extra);
+ let _ = stream.write_merged_json_packet(&msg, &extra);
}
let msg = NetworkEventUpdateMsg {
@@ -517,7 +525,7 @@ fn run_server(
updateType: "responseContent".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &actor.response_content());
+ let _ = stream.write_merged_json_packet(&msg, &actor.response_content());
}
let msg = NetworkEventUpdateMsg {
@@ -526,7 +534,7 @@ fn run_server(
updateType: "responseCookies".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &actor.response_cookies());
+ let _ = stream.write_merged_json_packet(&msg, &actor.response_cookies());
}
let msg = NetworkEventUpdateMsg {
@@ -535,7 +543,7 @@ fn run_server(
updateType: "responseHeaders".to_owned(),
};
for stream in &mut connections {
- stream.write_merged_json_packet(&msg, &actor.response_headers());
+ let _ = stream.write_merged_json_packet(&msg, &actor.response_headers());
}
},
}
@@ -583,15 +591,18 @@ fn run_server(
})
.expect("Thread spawning failed");
+ let mut next_id = StreamId(0);
while let Ok(msg) = receiver.recv() {
debug!("{:?}", msg);
match msg {
DevtoolsControlMsg::FromChrome(ChromeToDevtoolsControlMsg::AddClient(stream)) => {
let actors = actors.clone();
+ let id = next_id;
+ next_id = StreamId(id.0 + 1);
accepted_connections.push(stream.try_clone().unwrap());
thread::Builder::new()
.name("DevtoolsClientHandler".to_owned())
- .spawn(move || handle_client(actors, stream.try_clone().unwrap()))
+ .spawn(move || handle_client(actors, stream.try_clone().unwrap(), id))
.expect("Thread spawning failed");
},
DevtoolsControlMsg::FromScript(ScriptToDevtoolsControlMsg::FramerateTick(