From ffdcd3aa7a23ef300118677a4bb90d6c9747f7b3 Mon Sep 17 00:00:00 2001 From: CYBAI Date: Thu, 9 May 2019 23:13:59 +0900 Subject: [PATCH 1/2] Fix `mode` and `credential-mode` for fetching classic worker script Ref to step 1 in https://html.spec.whatwg.org/multipage/#fetch-a-classic-script --- components/script/dom/dedicatedworkerglobalscope.rs | 5 +++-- .../workers/constructors/Worker/same-origin.html.ini | 8 +++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/components/script/dom/dedicatedworkerglobalscope.rs b/components/script/dom/dedicatedworkerglobalscope.rs index 374471b8798..805f75aa0f3 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -37,7 +37,7 @@ use js::jsapi::{JSAutoCompartment, 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, Referrer, RequestBuilder, RequestMode}; use net_traits::IpcSend; use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin}; use servo_rand::random; @@ -310,7 +310,8 @@ impl DedicatedWorkerGlobalScope { let request = RequestBuilder::new(worker_url.clone()) .destination(Destination::Worker) - .credentials_mode(CredentialsMode::Include) + .mode(RequestMode::SameOrigin) + .credentials_mode(CredentialsMode::CredentialsSameOrigin) .use_url_credentials(true) .pipeline_id(pipeline_id) .referrer(referrer) 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 + From 261c8d9e0c4ec1ccd8d945b8ec133ac7b308978c Mon Sep 17 00:00:00 2001 From: CYBAI Date: Fri, 10 May 2019 00:30:45 +0900 Subject: [PATCH 2/2] Introduce parser metadata for request --- components/net_traits/request.rs | 19 +++++++++++++++++++ .../script/dom/dedicatedworkerglobalscope.rs | 4 +++- .../script/dom/serviceworkerglobalscope.rs | 3 ++- components/script/dom/workerglobalscope.rs | 5 ++++- components/script/fetch.rs | 1 + 5 files changed, 29 insertions(+), 3 deletions(-) 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 805f75aa0f3..7d605659bfc 100644 --- a/components/script/dom/dedicatedworkerglobalscope.rs +++ b/components/script/dom/dedicatedworkerglobalscope.rs @@ -37,7 +37,8 @@ use js::jsapi::{JSAutoCompartment, JSContext}; use js::jsval::UndefinedValue; use js::rust::HandleValue; use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId}; -use net_traits::request::{CredentialsMode, Destination, Referrer, RequestBuilder, RequestMode}; +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; @@ -312,6 +313,7 @@ impl DedicatedWorkerGlobalScope { .destination(Destination::Worker) .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 1ecdbf00b9b..fd64cf2cf9e 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -31,7 +31,7 @@ use ipc_channel::router::ROUTER; use js::jsapi::{JSAutoCompartment, 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, @@ -287,6 +287,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 41b90fa2fa9..b147cc6383c 100644 --- a/components/script/dom/workerglobalscope.rs +++ b/components/script/dom/workerglobalscope.rs @@ -42,7 +42,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}; @@ -216,6 +218,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 d65b79291c5..5447d3b5752 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, } }