Introduce parser metadata for request

This commit is contained in:
CYBAI 2019-05-10 00:30:45 +09:00
parent ffdcd3aa7a
commit 261c8d9e0c
5 changed files with 29 additions and 3 deletions

View file

@ -134,6 +134,14 @@ pub enum CorsSettings {
UseCredentials, 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)] #[derive(Clone, Debug, Deserialize, MallocSizeOf, Serialize)]
pub struct RequestBuilder { pub struct RequestBuilder {
#[serde( #[serde(
@ -169,6 +177,7 @@ pub struct RequestBuilder {
pub integrity_metadata: String, pub integrity_metadata: String,
// to keep track of redirects // to keep track of redirects
pub url_list: Vec<ServoUrl>, pub url_list: Vec<ServoUrl>,
pub parser_metadata: ParserMetadata,
} }
impl RequestBuilder { impl RequestBuilder {
@ -194,6 +203,7 @@ impl RequestBuilder {
redirect_mode: RedirectMode::Follow, redirect_mode: RedirectMode::Follow,
integrity_metadata: "".to_owned(), integrity_metadata: "".to_owned(),
url_list: vec![], url_list: vec![],
parser_metadata: ParserMetadata::Default,
} }
} }
@ -295,6 +305,11 @@ impl RequestBuilder {
self self
} }
pub fn parser_metadata(mut self, parser_metadata: ParserMetadata) -> RequestBuilder {
self.parser_metadata = parser_metadata;
self
}
pub fn build(self) -> Request { pub fn build(self) -> Request {
let mut request = Request::new( let mut request = Request::new(
self.url.clone(), self.url.clone(),
@ -323,6 +338,7 @@ impl RequestBuilder {
request.redirect_count = url_list.len() as u32 - 1; request.redirect_count = url_list.len() as u32 - 1;
request.url_list = url_list; request.url_list = url_list;
request.integrity_metadata = self.integrity_metadata; request.integrity_metadata = self.integrity_metadata;
request.parser_metadata = self.parser_metadata;
request request
} }
} }
@ -388,6 +404,8 @@ pub struct Request {
pub redirect_count: u32, pub redirect_count: u32,
/// <https://fetch.spec.whatwg.org/#concept-request-response-tainting> /// <https://fetch.spec.whatwg.org/#concept-request-response-tainting>
pub response_tainting: ResponseTainting, pub response_tainting: ResponseTainting,
/// <https://fetch.spec.whatwg.org/#concept-request-parser-metadata>
pub parser_metadata: ParserMetadata,
} }
impl Request { impl Request {
@ -417,6 +435,7 @@ impl Request {
redirect_mode: RedirectMode::Follow, redirect_mode: RedirectMode::Follow,
integrity_metadata: String::new(), integrity_metadata: String::new(),
url_list: vec![url], url_list: vec![url],
parser_metadata: ParserMetadata::Default,
redirect_count: 0, redirect_count: 0,
response_tainting: ResponseTainting::Basic, response_tainting: ResponseTainting::Basic,
} }

View file

@ -37,7 +37,8 @@ use js::jsapi::{JSAutoCompartment, JSContext};
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::rust::HandleValue; use js::rust::HandleValue;
use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId}; 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 net_traits::IpcSend;
use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin}; use script_traits::{TimerEvent, TimerSource, WorkerGlobalScopeInit, WorkerScriptLoadOrigin};
use servo_rand::random; use servo_rand::random;
@ -312,6 +313,7 @@ impl DedicatedWorkerGlobalScope {
.destination(Destination::Worker) .destination(Destination::Worker)
.mode(RequestMode::SameOrigin) .mode(RequestMode::SameOrigin)
.credentials_mode(CredentialsMode::CredentialsSameOrigin) .credentials_mode(CredentialsMode::CredentialsSameOrigin)
.parser_metadata(ParserMetadata::NotParserInserted)
.use_url_credentials(true) .use_url_credentials(true)
.pipeline_id(pipeline_id) .pipeline_id(pipeline_id)
.referrer(referrer) .referrer(referrer)

View file

@ -31,7 +31,7 @@ use ipc_channel::router::ROUTER;
use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback}; use js::jsapi::{JSAutoCompartment, JSContext, JS_AddInterruptCallback};
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use msg::constellation_msg::PipelineId; 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 net_traits::{CustomResponseMediator, IpcSend};
use script_traits::{ use script_traits::{
ScopeThings, ServiceWorkerMsg, TimerEvent, WorkerGlobalScopeInit, WorkerScriptLoadOrigin, ScopeThings, ServiceWorkerMsg, TimerEvent, WorkerGlobalScopeInit, WorkerScriptLoadOrigin,
@ -287,6 +287,7 @@ impl ServiceWorkerGlobalScope {
let request = RequestBuilder::new(script_url.clone()) let request = RequestBuilder::new(script_url.clone())
.destination(Destination::ServiceWorker) .destination(Destination::ServiceWorker)
.credentials_mode(CredentialsMode::Include) .credentials_mode(CredentialsMode::Include)
.parser_metadata(ParserMetadata::NotParserInserted)
.use_url_credentials(true) .use_url_credentials(true)
.pipeline_id(pipeline_id) .pipeline_id(pipeline_id)
.referrer(referrer) .referrer(referrer)

View file

@ -42,7 +42,9 @@ use js::jsval::UndefinedValue;
use js::panic::maybe_resume_unwind; use js::panic::maybe_resume_unwind;
use js::rust::{HandleValue, ParentRuntime}; use js::rust::{HandleValue, ParentRuntime};
use msg::constellation_msg::PipelineId; 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 net_traits::IpcSend;
use script_traits::WorkerGlobalScopeInit; use script_traits::WorkerGlobalScopeInit;
use script_traits::{TimerEvent, TimerEventId}; use script_traits::{TimerEvent, TimerEventId};
@ -216,6 +218,7 @@ impl WorkerGlobalScopeMethods for WorkerGlobalScope {
let request = NetRequestInit::new(url.clone()) let request = NetRequestInit::new(url.clone())
.destination(Destination::Script) .destination(Destination::Script)
.credentials_mode(CredentialsMode::Include) .credentials_mode(CredentialsMode::Include)
.parser_metadata(ParserMetadata::NotParserInserted)
.use_url_credentials(true) .use_url_credentials(true)
.origin(global_scope.origin().immutable().clone()) .origin(global_scope.origin().immutable().clone())
.pipeline_id(Some(self.upcast::<GlobalScope>().pipeline_id())) .pipeline_id(Some(self.upcast::<GlobalScope>().pipeline_id()))

View file

@ -124,6 +124,7 @@ fn request_init_from_request(request: NetTraitsRequest) -> RequestBuilder {
redirect_mode: request.redirect_mode, redirect_mode: request.redirect_mode,
integrity_metadata: "".to_owned(), integrity_metadata: "".to_owned(),
url_list: vec![], url_list: vec![],
parser_metadata: request.parser_metadata,
} }
} }