mirror of
https://github.com/servo/servo.git
synced 2025-06-22 08:08:59 +01:00
Extract content type and character set from HTTP response headers
We don't use this information anywhere, yet.
This commit is contained in:
parent
ec2111edbf
commit
f73e48b32f
3 changed files with 29 additions and 3 deletions
|
@ -54,7 +54,7 @@ fn load(url: Url, start_chan: Chan<LoadResponse>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut metadata = Metadata::default(url);
|
let mut metadata = Metadata::default(url);
|
||||||
// We will set other fields here.
|
metadata.set_content_type(&response.headers.content_type);
|
||||||
|
|
||||||
let progress_chan = start_sending(start_chan, metadata);
|
let progress_chan = start_sending(start_chan, metadata);
|
||||||
loop {
|
loop {
|
||||||
|
|
|
@ -12,6 +12,7 @@ use std::comm::{Chan, Port, SharedChan};
|
||||||
use std::comm;
|
use std::comm;
|
||||||
use extra::url::Url;
|
use extra::url::Url;
|
||||||
use util::spawn_listener;
|
use util::spawn_listener;
|
||||||
|
use http::headers::content_type::MediaType;
|
||||||
|
|
||||||
pub enum ControlMsg {
|
pub enum ControlMsg {
|
||||||
/// Request the data associated with a particular URL
|
/// Request the data associated with a particular URL
|
||||||
|
@ -24,7 +25,11 @@ pub struct Metadata {
|
||||||
/// Final URL after redirects.
|
/// Final URL after redirects.
|
||||||
final_url: Url,
|
final_url: Url,
|
||||||
|
|
||||||
// Other fields (e.g. content type, charset) will go here.
|
/// MIME type / subtype.
|
||||||
|
content_type: Option<(~str, ~str)>,
|
||||||
|
|
||||||
|
/// Character set.
|
||||||
|
charset: Option<~str>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Metadata {
|
impl Metadata {
|
||||||
|
@ -32,6 +37,25 @@ impl Metadata {
|
||||||
pub fn default(url: Url) -> Metadata {
|
pub fn default(url: Url) -> Metadata {
|
||||||
Metadata {
|
Metadata {
|
||||||
final_url: url,
|
final_url: url,
|
||||||
|
content_type: None,
|
||||||
|
charset: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Extract the parts of a MediaType that we care about.
|
||||||
|
pub fn set_content_type(&mut self, content_type: &Option<MediaType>) {
|
||||||
|
match *content_type {
|
||||||
|
None => (),
|
||||||
|
Some(MediaType { type_: ref type_,
|
||||||
|
subtype: ref subtype,
|
||||||
|
parameters: ref parameters }) => {
|
||||||
|
self.content_type = Some((type_.clone(), subtype.clone()));
|
||||||
|
for &(ref k, ref v) in parameters.iter() {
|
||||||
|
if "charset" == k.as_slice() {
|
||||||
|
self.charset = Some(v.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -336,6 +336,8 @@ pub fn parse_html(cx: *JSContext,
|
||||||
resource_task.send(Load(url.clone(), input_chan));
|
resource_task.send(Load(url.clone(), input_chan));
|
||||||
let load_response = input_port.recv();
|
let load_response = input_port.recv();
|
||||||
|
|
||||||
|
debug!("Fetched page; metadata is %?", load_response.metadata);
|
||||||
|
|
||||||
let url2 = load_response.metadata.final_url.clone();
|
let url2 = load_response.metadata.final_url.clone();
|
||||||
let url3 = url2.clone();
|
let url3 = url2.clone();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue