aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/script/dom/htmllinkelement.rs47
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;