diff options
author | Delan Azabani <dazabani@igalia.com> | 2025-01-30 19:15:35 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-01-30 11:15:35 +0000 |
commit | 5e9de2cb61fbfd82b27343bf03439838458b9848 (patch) | |
tree | 64574624cda94237bbfc443a29b792229fde0ee2 /components/shared/net | |
parent | 9eeb602f7afca502753bb8211ab646c952951761 (diff) | |
download | servo-5e9de2cb61fbfd82b27343bf03439838458b9848.tar.gz servo-5e9de2cb61fbfd82b27343bf03439838458b9848.zip |
Include `WebViewId` into EmbedderMsg variants where possible (#35211)
`EmbedderMsg` was previously paired with an implicit
`Option<WebViewId>`, even though almost all variants were either always
`Some` or always `None`, depending on whether there was a `WebView
involved.
This patch adds the `WebViewId` to as many `EmbedderMsg` variants as
possible, so we can call their associated `WebView` delegate methods
without needing to check and unwrap the `Option`. In many cases, this
required more changes to plumb through the `WebViewId`.
Notably, all `Request`s now explicitly need a `WebView` or not, in order
to ensure that it is passed when appropriate.
Signed-off-by: Delan Azabani <dazabani@igalia.com>
Co-authored-by: Martin Robinson <mrobinson@igalia.com>
Diffstat (limited to 'components/shared/net')
-rw-r--r-- | components/shared/net/filemanager_thread.rs | 3 | ||||
-rw-r--r-- | components/shared/net/request.rs | 23 |
2 files changed, 11 insertions, 15 deletions
diff --git a/components/shared/net/filemanager_thread.rs b/components/shared/net/filemanager_thread.rs index 5167ab1b4de..71fdfe50f0a 100644 --- a/components/shared/net/filemanager_thread.rs +++ b/components/shared/net/filemanager_thread.rs @@ -7,6 +7,7 @@ use std::ops::Range; use std::path::PathBuf; use std::time::SystemTime; +use base::id::WebViewId; use embedder_traits::FilterPattern; use ipc_channel::ipc::IpcSender; use malloc_size_of_derive::MallocSizeOf; @@ -136,6 +137,7 @@ pub struct SelectedFile { pub enum FileManagerThreadMsg { /// Select a single file. Last field is pre-selected file path for testing SelectFile( + WebViewId, Vec<FilterPattern>, IpcSender<FileManagerResult<SelectedFile>>, FileOrigin, @@ -144,6 +146,7 @@ pub enum FileManagerThreadMsg { /// Select multiple files. Last field is pre-selected file paths for testing SelectFiles( + WebViewId, Vec<FilterPattern>, IpcSender<FileManagerResult<Vec<SelectedFile>>>, FileOrigin, diff --git a/components/shared/net/request.rs b/components/shared/net/request.rs index a6c31c57104..8bedd5de35a 100644 --- a/components/shared/net/request.rs +++ b/components/shared/net/request.rs @@ -4,7 +4,7 @@ use std::sync::{Arc, Mutex}; -use base::id::{PipelineId, TopLevelBrowsingContextId}; +use base::id::{PipelineId, WebViewId}; use content_security_policy::{self as csp}; use http::header::{HeaderName, AUTHORIZATION}; use http::{HeaderMap, Method}; @@ -266,7 +266,7 @@ pub struct RequestBuilder { pub referrer: Referrer, pub referrer_policy: ReferrerPolicy, pub pipeline_id: Option<PipelineId>, - pub target_browsing_context_id: Option<TopLevelBrowsingContextId>, + pub target_webview_id: Option<WebViewId>, pub redirect_mode: RedirectMode, pub integrity_metadata: String, // to keep track of redirects @@ -280,7 +280,7 @@ pub struct RequestBuilder { } impl RequestBuilder { - pub fn new(url: ServoUrl, referrer: Referrer) -> RequestBuilder { + pub fn new(webview_id: Option<WebViewId>, url: ServoUrl, referrer: Referrer) -> RequestBuilder { RequestBuilder { id: RequestId::default(), method: Method::GET, @@ -301,7 +301,7 @@ impl RequestBuilder { referrer, referrer_policy: ReferrerPolicy::EmptyString, pipeline_id: None, - target_browsing_context_id: None, + target_webview_id: webview_id, redirect_mode: RedirectMode::Follow, integrity_metadata: "".to_owned(), url_list: vec![], @@ -383,14 +383,6 @@ impl RequestBuilder { self } - pub fn target_browsing_context_id( - mut self, - target_browsing_context_id: Option<TopLevelBrowsingContextId>, - ) -> RequestBuilder { - self.target_browsing_context_id = target_browsing_context_id; - self - } - pub fn redirect_mode(mut self, redirect_mode: RedirectMode) -> RequestBuilder { self.redirect_mode = redirect_mode; self @@ -433,6 +425,7 @@ impl RequestBuilder { Some(Origin::Origin(self.origin)), self.referrer, self.pipeline_id, + self.target_webview_id, self.https_state, ); request.initiator = self.initiator; @@ -461,7 +454,6 @@ impl RequestBuilder { request.response_tainting = self.response_tainting; request.crash = self.crash; request.policy_container = self.policy_container; - request.target_browsing_context_id = self.target_browsing_context_id; request } } @@ -488,7 +480,7 @@ pub struct Request { pub body: Option<RequestBody>, // TODO: client object pub window: Window, - pub target_browsing_context_id: Option<TopLevelBrowsingContextId>, + pub target_webview_id: Option<WebViewId>, /// <https://fetch.spec.whatwg.org/#request-keepalive-flag> pub keep_alive: bool, /// <https://fetch.spec.whatwg.org/#request-service-workers-mode> @@ -545,6 +537,7 @@ impl Request { origin: Option<Origin>, referrer: Referrer, pipeline_id: Option<PipelineId>, + webview_id: Option<WebViewId>, https_state: HttpsState, ) -> Request { Request { @@ -563,7 +556,7 @@ impl Request { referrer, referrer_policy: ReferrerPolicy::EmptyString, pipeline_id, - target_browsing_context_id: None, + target_webview_id: webview_id, synchronous: false, mode: RequestMode::NoCors, use_cors_preflight: false, |