diff --git a/components/net_traits/request.rs b/components/net_traits/request.rs index d8da3f1f002..18cbb7fa661 100644 --- a/components/net_traits/request.rs +++ b/components/net_traits/request.rs @@ -134,6 +134,14 @@ pub enum CorsSettings { UseCredentials, } +/// [Parser Metadata](https://fetch.spec.whatwg.org/#concept-request-parser-metadata) +#[derive(Clone, Copy, Debug, Deserialize, MallocSizeOf, PartialEq, Serialize)] +pub enum ParserMetadata { + Default, + ParserInserted, + NotParserInserted, +} + #[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)] pub struct RequestBuilder { #[serde( @@ -169,6 +177,7 @@ pub struct RequestBuilder { pub integrity_metadata: String, // to keep track of redirects pub url_list: Vec, + pub parser_metadata: ParserMetadata, } impl RequestBuilder { @@ -194,6 +203,7 @@ impl RequestBuilder { redirect_mode: RedirectMode::Follow, integrity_metadata: "".to_owned(), url_list: vec![], + parser_metadata: ParserMetadata::Default, } } @@ -295,6 +305,11 @@ impl RequestBuilder { self } + pub fn parser_metadata(mut self, parser_metadata: ParserMetadata) -> RequestBuilder { + self.parser_metadata = parser_metadata; + self + } + pub fn build(self) -> Request { let mut request = Request::new( self.url.clone(), @@ -323,6 +338,7 @@ impl RequestBuilder { request.redirect_count = url_list.len() as u32 - 1; request.url_list = url_list; request.integrity_metadata = self.integrity_metadata; + request.parser_metadata = self.parser_metadata; request } } @@ -388,6 +404,8 @@ pub struct Request { pub redirect_count: u32, /// pub response_tainting: ResponseTainting, + /// + pub parser_metadata: ParserMetadata, } impl Request { @@ -417,6 +435,7 @@ impl Request { redirect_mode: RedirectMode::Follow, integrity_metadata: String::new(), url_list: vec![url], + parser_metadata: ParserMetadata::Default, redirect_count: 0, response_tainting: ResponseTainting::Basic, } diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 0ca5280849d..75d4b272834 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -38,7 +38,8 @@ use js::jsapi::{JSAutoRealm, JSContext}; use js::jsval::UndefinedValue; use js::rust::HandleValue; use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId}; -use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder}; +use net_traits::request::{CredentialsMode, Destination, ParserMetadata}; +use net_traits::request::{Referrer, RequestBuilder, RequestMode}; use net_traits::IpcSend; use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin}; use servo_rand::random; @@ -321,7 +322,9 @@ impl DedicatedWorkerGlobalScope { let request = RequestBuilder::new(worker_url.clone()) .destination(Destination::Worker) - .credentials_mode(CredentialsMode::Include) + .mode(RequestMode::SameOrigin) + .credentials_mode(CredentialsMode::CredentialsSameOrigin) + .parser_metadata(ParserMetadata::NotParserInserted) .use_url_credentials(true) .pipeline_id(pipeline_id) .referrer(referrer) diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index f7eee199f93..c2b3eab5dc8 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -32,7 +32,7 @@ use ipc_channel::router::ROUTER; use js::jsapi::{JSAutoRealm, JSContext, JS_AddInterruptCallback}; use js::jsval::UndefinedValue; use msg::constellation_msg::PipelineId; -use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder}; +use net_traits::request::{CredentialsMode, Destination, ParserMetadata, Referrer, RequestBuilder}; use net_traits::{CustomResponseMediator, IpcSend}; use script_traits::{ ScopeThings, ServiceWorkerMsg, TimerEvent, WorkerGlobalScopeInit, WorkerScriptLoadOrigin, @@ -290,6 +290,7 @@ impl ServiceWorkerGlobalScope { let request = RequestBuilder::new(script_url.clone()) .destination(Destination::ServiceWorker) .credentials_mode(CredentialsMode::Include) + .parser_metadata(ParserMetadata::NotParserInserted) .use_url_credentials(true) .pipeline_id(pipeline_id) .referrer(referrer) diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs index cf0bab5967c..3ea44c99936 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -43,7 +43,9 @@ use js::jsval::UndefinedValue; use js::panic::maybe_resume_unwind; use js::rust::{HandleValue, ParentRuntime}; use msg::constellation_msg::PipelineId; -use net_traits::request::{CredentialsMode, Destination, RequestBuilder as NetRequestInit}; +use net_traits::request::{ + CredentialsMode, Destination, ParserMetadata, RequestBuilder as NetRequestInit, +}; use net_traits::IpcSend; use script_traits::WorkerGlobalScopeInit; use script_traits::{TimerEvent, TimerEventId}; @@ -224,6 +226,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope { let request = NetRequestInit::new(url.clone()) .destination(Destination::Script) .credentials_mode(CredentialsMode::Include) + .parser_metadata(ParserMetadata::NotParserInserted) .use_url_credentials(true) .origin(global_scope.origin().immutable().clone()) .pipeline_id(Some(self.upcast::().pipeline_id())) diff --git a/components/script/fetch.rs b/components/script/fetch.rs index 8f0319f4443..e7011707227 100644 --- a/components/script/fetch.rs +++ b/components/script/fetch.rs @@ -124,6 +124,7 @@ fn request_init_from_request(request: NetTraitsRequest) -> RequestBuilder { redirect_mode: request.redirect_mode, integrity_metadata: "".to_owned(), url_list: vec![], + parser_metadata: request.parser_metadata, } } diff --git a/tests/wpt/metadata/workers/constructors/Worker/same-origin.html.ini b/tests/wpt/metadata/workers/constructors/Worker/same-origin.html.ini index 8c2533c6d98..de990d5d1e6 100644 --- a/tests/wpt/metadata/workers/constructors/Worker/same-origin.html.ini +++ b/tests/wpt/metadata/workers/constructors/Worker/same-origin.html.ini @@ -1,3 +1,9 @@ [same-origin.html] type: testharness - disabled: intermittent failures + expected: TIMEOUT + [unsupported_scheme] + expected: FAIL + + [about_blank] + expected: TIMEOUT +