Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the fetch stack for stylesheets. #13575

Merged
merged 1 commit into from Oct 5, 2016
Merged
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Use the fetch stack for stylesheets.

Fixes #13462.
  • Loading branch information
Ms2ger committed Oct 4, 2016
commit 2980903bfb7a0fd1ed92ca5e1bf5aaf29ccb92c6
@@ -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};
@@ -243,11 +245,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() {
@@ -256,10 +255,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()

This comment has been minimized.

@jdm

jdm Oct 4, 2016

Member

This should set use_url_credentials to true per https://html.spec.whatwg.org/multipage/infrastructure.html#create-a-potential-cors-request , as well as set mode to Cors.

};

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>) {
@@ -295,9 +307,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 {
@@ -306,12 +328,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;
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.