diff options
Diffstat (limited to 'components/devtools/lib.rs')
-rw-r--r-- | components/devtools/lib.rs | 45 |
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( |