mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
script: Move navigation fetching to the ScriptThread
(#34919)
This allows reusing the asynchrnous fetch mechanism that we use for page resources and is likely a step toward removing the `FetchThread`. Benefits: - Reduces IPC traffic during navigation. Now instead of bouncing between the constellation and the `ScriptThread` responses are sent directly to the `ScriptThread`. - Allows cancelling loads after redirects, which was not possible before. There is the question of what to do when a redirect is cross-origin (#23037). This currently isn't handled properly as the `Constellation` sends data to the same `Pipeline` that initiated the load. This change doesn't fix this issue, but does make it more possible for the `ScriptThread` to shut down the pipeline and ask the `Constellation` to replace it with a new one. Signed-off-by: Martin Robinson <mrobinson@igalia.com>
This commit is contained in:
parent
73c0701c83
commit
fbd77b4524
16 changed files with 420 additions and 460 deletions
|
@ -13,6 +13,7 @@ use crossbeam_channel::{select, Receiver, SendError, Sender};
|
|||
use devtools_traits::{DevtoolScriptControlMsg, ScriptToDevtoolsControlMsg};
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use net_traits::image_cache::PendingImageResponse;
|
||||
use net_traits::FetchResponseMsg;
|
||||
use profile_traits::mem::{self as profile_mem, OpaqueSender, ReportsChan};
|
||||
use profile_traits::time::{self as profile_time};
|
||||
use script_traits::{ConstellationControlMsg, LayoutMsg, Painter, ScriptMsg};
|
||||
|
@ -49,7 +50,6 @@ impl MixedMessage {
|
|||
match self {
|
||||
MixedMessage::FromConstellation(ref inner_msg) => match *inner_msg {
|
||||
ConstellationControlMsg::StopDelayingLoadEventsMode(id) => Some(id),
|
||||
ConstellationControlMsg::NavigationResponse(id, _) => Some(id),
|
||||
ConstellationControlMsg::AttachLayout(ref new_layout_info) => new_layout_info
|
||||
.parent_info
|
||||
.or(Some(new_layout_info.new_pipeline_id)),
|
||||
|
@ -95,6 +95,7 @@ impl MixedMessage {
|
|||
pipeline_id
|
||||
},
|
||||
MainThreadScriptMsg::Common(CommonScriptMsg::CollectReports(_)) => None,
|
||||
MainThreadScriptMsg::NavigationResponse { pipeline_id, .. } => Some(pipeline_id),
|
||||
MainThreadScriptMsg::WorkletLoaded(pipeline_id) => Some(pipeline_id),
|
||||
MainThreadScriptMsg::RegisterPaintWorklet { pipeline_id, .. } => Some(pipeline_id),
|
||||
MainThreadScriptMsg::Inactive => None,
|
||||
|
@ -116,6 +117,10 @@ pub(crate) enum MainThreadScriptMsg {
|
|||
/// Notifies the script thread that a new worklet has been loaded, and thus the page should be
|
||||
/// reflowed.
|
||||
WorkletLoaded(PipelineId),
|
||||
NavigationResponse {
|
||||
pipeline_id: PipelineId,
|
||||
message: Box<FetchResponseMsg>,
|
||||
},
|
||||
/// Notifies the script thread that a new paint worklet has been registered.
|
||||
RegisterPaintWorklet {
|
||||
pipeline_id: PipelineId,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue