diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-10-04 18:12:18 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-10-04 18:12:18 -0500 |
commit | 710bd7e1dc8f314399d937e968f160f94143e500 (patch) | |
tree | ee1fc9d1723deaaf7dfc93ad24cc8e60b91351bc /components/script/dom | |
parent | 136c9a89b9a923052f967ffb6186f46dafefa22f (diff) | |
parent | 2980903bfb7a0fd1ed92ca5e1bf5aaf29ccb92c6 (diff) | |
download | servo-710bd7e1dc8f314399d937e968f160f94143e500.tar.gz servo-710bd7e1dc8f314399d937e968f160f94143e500.zip |
Auto merge of #13575 - servo:fetch-link, r=jdm
Use the fetch stack for stylesheets.
Fixes #13462.
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/13575)
<!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/htmllinkelement.rs | 47 |
1 files changed, 34 insertions, 13 deletions
diff --git a/components/script/dom/htmllinkelement.rs b/components/script/dom/htmllinkelement.rs index 74e21ac9668..b02aa0ad6a7 100644 --- a/components/script/dom/htmllinkelement.rs +++ b/components/script/dom/htmllinkelement.rs @@ -12,6 +12,7 @@ use dom::bindings::codegen::Bindings::HTMLLinkElementBinding::HTMLLinkElementMet use dom::bindings::inheritance::Castable; use dom::bindings::js::{JS, MutNullableHeap, Root, RootedReference}; use dom::bindings::refcounted::Trusted; +use dom::bindings::reflector::Reflectable; use dom::bindings::str::DOMString; use dom::document::Document; use dom::domtokenlist::DOMTokenList; @@ -28,7 +29,8 @@ use hyper_serde::Serde; use ipc_channel::ipc; use ipc_channel::router::ROUTER; use msg::constellation_msg::ReferrerPolicy; -use net_traits::{AsyncResponseListener, AsyncResponseTarget, Metadata, NetworkError}; +use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError}; +use net_traits::request::{CredentialsMode, Destination, RequestInit, Type as RequestType}; use network_listener::{NetworkListener, PreInvoke}; use script_layout_interface::message::Msg; use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg}; @@ -244,11 +246,8 @@ impl HTMLLinkElement { script_chan: document.window().networking_task_source(), wrapper: Some(document.window().get_runnable_wrapper()), }; - let response_target = AsyncResponseTarget { - sender: action_sender, - }; ROUTER.add_route(action_receiver.to_opaque(), box move |message| { - listener.notify_action(message.to().unwrap()); + listener.notify_fetch(message.to().unwrap()); }); if self.parser_inserted.get() { @@ -257,10 +256,23 @@ impl HTMLLinkElement { let referrer_policy = match self.RelList().Contains("noreferrer".into()) { true => Some(ReferrerPolicy::NoReferrer), - false => None, + false => document.get_referrer_policy(), + }; + + let request = RequestInit { + url: url.clone(), + type_: RequestType::Style, + destination: Destination::Style, + credentials_mode: CredentialsMode::Include, + use_url_credentials: true, + origin: document.url().clone(), + pipeline_id: Some(self.global().r().pipeline_id()), + referrer_url: Some(document.url().clone()), + referrer_policy: referrer_policy, + .. RequestInit::default() }; - document.load_async(LoadType::Stylesheet(url), response_target, referrer_policy); + document.fetch_async(LoadType::Stylesheet(url), request, action_sender); } fn handle_favicon_url(&self, rel: &str, href: &str, sizes: &Option<String>) { @@ -296,9 +308,19 @@ struct StylesheetContext { impl PreInvoke for StylesheetContext {} -impl AsyncResponseListener for StylesheetContext { - fn headers_available(&mut self, metadata: Result<Metadata, NetworkError>) { - self.metadata = metadata.ok(); +impl FetchResponseListener for StylesheetContext { + fn process_request_body(&mut self) {} + + fn process_request_eof(&mut self) {} + + fn process_response(&mut self, + metadata: Result<FetchMetadata, NetworkError>) { + self.metadata = metadata.ok().map(|m| { + match m { + FetchMetadata::Unfiltered(m) => m, + FetchMetadata::Filtered { unsafe_, .. } => unsafe_ + } + }); if let Some(ref meta) = self.metadata { if let Some(Serde(ContentType(Mime(TopLevel::Text, SubLevel::Css, _)))) = meta.content_type { } else { @@ -307,12 +329,11 @@ impl AsyncResponseListener for StylesheetContext { } } - fn data_available(&mut self, payload: Vec<u8>) { - let mut payload = payload; + fn process_response_chunk(&mut self, mut payload: Vec<u8>) { self.data.append(&mut payload); } - fn response_complete(&mut self, status: Result<(), NetworkError>) { + fn process_response_eof(&mut self, status: Result<(), NetworkError>) { let elem = self.elem.root(); let document = document_from_node(&*elem); let mut successful = false; |