diff options
Diffstat (limited to 'components/script')
-rw-r--r-- | components/script/dom/request.rs | 36 | ||||
-rw-r--r-- | components/script/fetch.rs | 13 |
2 files changed, 20 insertions, 29 deletions
diff --git a/components/script/dom/request.rs b/components/script/dom/request.rs index 5894eae8de7..82b7773fc3e 100644 --- a/components/script/dom/request.rs +++ b/components/script/dom/request.rs @@ -55,14 +55,11 @@ pub struct Request { impl Request { fn new_inherited(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> Request { + url: ServoUrl) -> Request { Request { reflector_: Reflector::new(), request: DOMRefCell::new( - net_request_from_global(global, - url, - is_service_worker_global_scope)), + net_request_from_global(global, url)), body_used: Cell::new(false), headers: Default::default(), mime_type: DOMRefCell::new("".to_string().into_bytes()), @@ -71,11 +68,9 @@ impl Request { } pub fn new(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> Root<Request> { + url: ServoUrl) -> Root<Request> { reflect_dom_object(box Request::new_inherited(global, - url, - is_service_worker_global_scope), + url), global, RequestBinding::Wrap) } @@ -111,9 +106,7 @@ impl Request { return Err(Error::Type("Url includes credentials".to_string())) } // Step 5.4 - temporary_request = net_request_from_global(global, - url, - false); + temporary_request = net_request_from_global(global, url); // Step 5.5 fallback_mode = Some(NetTraitsRequestMode::CorsMode); // Step 5.6 @@ -152,9 +145,7 @@ impl Request { // Step 12 let mut request: NetTraitsRequest; - request = net_request_from_global(global, - temporary_request.current_url(), - false); + request = net_request_from_global(global, temporary_request.current_url()); request.method = temporary_request.method; request.headers = temporary_request.headers.clone(); request.unsafe_request = true; @@ -293,9 +284,7 @@ impl Request { } // Step 26 - let r = Request::from_net_request(global, - false, - request); + let r = Request::from_net_request(global, request); r.headers.or_init(|| Headers::for_request(&r.global())); // Step 27 @@ -421,11 +410,9 @@ impl Request { impl Request { fn from_net_request(global: &GlobalScope, - is_service_worker_global_scope: bool, net_request: NetTraitsRequest) -> Root<Request> { let r = Request::new(global, - net_request.current_url(), - is_service_worker_global_scope); + net_request.current_url()); *r.request.borrow_mut() = net_request; r } @@ -433,11 +420,10 @@ impl Request { fn clone_from(r: &Request) -> Fallible<Root<Request>> { let req = r.request.borrow(); let url = req.url(); - let is_service_worker_global_scope = req.is_service_worker_global_scope; let body_used = r.body_used.get(); let mime_type = r.mime_type.borrow().clone(); let headers_guard = r.Headers().get_guard(); - let r_clone = Request::new(&r.global(), url, is_service_worker_global_scope); + let r_clone = Request::new(&r.global(), url); r_clone.request.borrow_mut().pipeline_id = req.pipeline_id; { let mut borrowed_r_request = r_clone.request.borrow_mut(); @@ -457,13 +443,11 @@ impl Request { } fn net_request_from_global(global: &GlobalScope, - url: ServoUrl, - is_service_worker_global_scope: bool) -> NetTraitsRequest { + url: ServoUrl) -> NetTraitsRequest { let origin = Origin::Origin(global.get_url().origin()); let pipeline_id = global.pipeline_id(); NetTraitsRequest::new(url, Some(origin), - is_service_worker_global_scope, Some(pipeline_id)) } diff --git a/components/script/fetch.rs b/components/script/fetch.rs index 39c5cbc8f97..5a5ca041acd 100644 --- a/components/script/fetch.rs +++ b/components/script/fetch.rs @@ -7,6 +7,7 @@ use dom::bindings::codegen::Bindings::RequestBinding::RequestInit; use dom::bindings::codegen::Bindings::ResponseBinding::ResponseBinding::ResponseMethods; use dom::bindings::codegen::Bindings::ResponseBinding::ResponseType as DOMResponseType; use dom::bindings::error::Error; +use dom::bindings::inheritance::Castable; use dom::bindings::js::Root; use dom::bindings::refcounted::{Trusted, TrustedPromise}; use dom::bindings::reflector::DomObject; @@ -16,13 +17,14 @@ use dom::headers::Guard; use dom::promise::Promise; use dom::request::Request; use dom::response::Response; +use dom::serviceworkerglobalscope::ServiceWorkerGlobalScope; use ipc_channel::ipc; use ipc_channel::router::ROUTER; use js::jsapi::JSAutoCompartment; use net_traits::{FetchResponseListener, NetworkError}; use net_traits::{FilteredMetadata, FetchMetadata, Metadata}; use net_traits::CoreResourceMsg::Fetch as NetTraitsFetch; -use net_traits::request::Request as NetTraitsRequest; +use net_traits::request::{Request as NetTraitsRequest, ServiceWorkersMode}; use net_traits::request::RequestInit as NetTraitsRequestInit; use network_listener::{NetworkListener, PreInvoke}; use servo_url::ServoUrl; @@ -83,12 +85,17 @@ pub fn Fetch(global: &GlobalScope, input: RequestInfo, init: RootedTraceableBox< }, Ok(r) => r.get_request(), }; - let request_init = request_init_from_request(request); + let mut request_init = request_init_from_request(request); // Step 3 - response.Headers().set_guard(Guard::Immutable); + if global.downcast::<ServiceWorkerGlobalScope>().is_some() { + request_init.service_workers_mode = ServiceWorkersMode::Foreign; + } // Step 4 + response.Headers().set_guard(Guard::Immutable); + + // Step 5 let (action_sender, action_receiver) = ipc::channel().unwrap(); let fetch_context = Arc::new(Mutex::new(FetchContext { fetch_promise: Some(TrustedPromise::new(promise.clone())), |