mirror of
https://github.com/servo/servo.git
synced 2025-07-15 03:13:41 +01:00
The will-navigate message tells the devtools client to expect a navigation for a browsing context. This makes the network monitor clear any previous entries and show the requests for the new page that is loaded. In order to support this correctly, we need to send the navigation notification from the constellation instead of the script thread, otherwise we silently ignore navigations triggered by the browser URL bar. Testing: Ran servo in devtools mode , now the requests appear for new loaded page Fixes: https://github.com/servo/servo/issues/37334 --------- Signed-off-by: Uthman Yahaya Baba <uthmanyahayababa@gmail.com>
74 lines
2.5 KiB
Rust
74 lines
2.5 KiB
Rust
/* 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::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,
|
|
);
|
|
}
|
|
},
|
|
}
|
|
}
|