diff options
Diffstat (limited to 'components/devtools/actors/network_event.rs')
-rw-r--r-- | components/devtools/actors/network_event.rs | 109 |
1 files changed, 47 insertions, 62 deletions
diff --git a/components/devtools/actors/network_event.rs b/components/devtools/actors/network_event.rs index 5e4fe01bcf3..8bc3cf9850a 100644 --- a/components/devtools/actors/network_event.rs +++ b/components/devtools/actors/network_event.rs @@ -9,13 +9,12 @@ use actor::{Actor, ActorMessageStatus, ActorRegistry}; use devtools_traits::HttpRequest as DevtoolsHttpRequest; use devtools_traits::HttpResponse as DevtoolsHttpResponse; -use hyper::header::{ContentType, Cookie}; -use hyper::header::Headers; -use hyper::http::RawStatus; -use hyper::method::Method; +use headers_core::HeaderMapExt; +use headers_ext::{ContentType, Cookie}; +use http::{header, HeaderMap}; +use hyper::{Method, StatusCode}; use protocol::JsonPacketStream; use serde_json::{Map, Value}; -use std::borrow::Cow; use std::net::TcpStream; use time; use time::Tm; @@ -23,7 +22,7 @@ use time::Tm; struct HttpRequest { url: String, method: Method, - headers: Headers, + headers: HeaderMap, body: Option<Vec<u8>>, startedDateTime: Tm, timeStamp: i64, @@ -32,9 +31,9 @@ struct HttpRequest { } struct HttpResponse { - headers: Option<Headers>, - status: Option<RawStatus>, - body: Option<Vec<u8>>, + headers: Option<HeaderMap>, + status: Option<(StatusCode, String)>, + body: Option<Vec<u8>> } pub struct NetworkEventActor { @@ -189,15 +188,11 @@ impl Actor for NetworkEventActor { let mut headers = Vec::new(); let mut rawHeadersString = "".to_owned(); let mut headersSize = 0; - for item in self.request.headers.iter() { - let name = item.name(); - let value = item.value_string(); - rawHeadersString = rawHeadersString + name + ":" + &value + "\r\n"; - headersSize += name.len() + value.len(); - headers.push(Header { - name: name.to_owned(), - value: value.to_owned(), - }); + for (name, value) in self.request.headers.iter() { + let value = &value.to_str().unwrap().to_string(); + rawHeadersString = rawHeadersString + name.as_str() + ":" + &value + "\r\n"; + headersSize += name.as_str().len() + value.len(); + headers.push(Header { name: name.as_str().to_owned(), value: value.to_owned() }); } let msg = GetRequestHeadersReply { from: self.name(), @@ -210,11 +205,10 @@ impl Actor for NetworkEventActor { }, "getRequestCookies" => { let mut cookies = Vec::new(); - if let Some(req_cookies) = self.request.headers.get_raw("Cookie") { - for cookie in &*req_cookies { - if let Ok(cookie_value) = String::from_utf8(cookie.clone()) { - cookies = cookie_value.into_bytes(); - } + + for cookie in self.request.headers.get_all(header::COOKIE) { + if let Ok(cookie_value) = String::from_utf8(cookie.as_bytes().to_vec()) { + cookies = cookie_value.into_bytes(); } } @@ -239,17 +233,15 @@ impl Actor for NetworkEventActor { let mut headers = vec![]; let mut rawHeadersString = "".to_owned(); let mut headersSize = 0; - for item in response_headers.iter() { - let name = item.name(); - let value = item.value_string(); + for (name, value) in response_headers.iter() { headers.push(Header { - name: name.to_owned(), - value: value.clone(), + name: name.as_str().to_owned(), + value: value.to_str().unwrap().to_owned(), }); - headersSize += name.len() + value.len(); - rawHeadersString.push_str(name); + headersSize += name.as_str().len() + value.len(); + rawHeadersString.push_str(name.as_str()); rawHeadersString.push_str(":"); - rawHeadersString.push_str(&value); + rawHeadersString.push_str(value.to_str().unwrap()); rawHeadersString.push_str("\r\n"); } let msg = GetResponseHeadersReply { @@ -264,11 +256,10 @@ impl Actor for NetworkEventActor { }, "getResponseCookies" => { let mut cookies = Vec::new(); - if let Some(res_cookies) = self.request.headers.get_raw("set-cookie") { - for cookie in &*res_cookies { - if let Ok(cookie_value) = String::from_utf8(cookie.clone()) { - cookies = cookie_value.into_bytes(); - } + // TODO: This seems quite broken + for cookie in self.request.headers.get_all(header::SET_COOKIE) { + if let Ok(cookie_value) = String::from_utf8(cookie.as_bytes().to_vec()) { + cookies = cookie_value.into_bytes(); } } @@ -330,8 +321,8 @@ impl NetworkEventActor { name: name, request: HttpRequest { url: String::new(), - method: Method::Get, - headers: Headers::new(), + method: Method::GET, + headers: HeaderMap::new(), body: None, startedDateTime: time::now(), timeStamp: time::get_time().sec, @@ -363,7 +354,7 @@ impl NetworkEventActor { self.response.headers = response.headers.clone(); self.response.status = response.status.as_ref().map(|&(s, ref st)| { let status_text = String::from_utf8_lossy(st).into_owned(); - RawStatus(s, Cow::from(status_text)) + (StatusCode::from_u16(s).unwrap(), status_text) }); self.response.body = response.body.clone(); } @@ -385,13 +376,8 @@ impl NetworkEventActor { // TODO: Send the correct values for all these fields. let hSizeOption = self.response.headers.as_ref().map(|headers| headers.len()); let hSize = hSizeOption.unwrap_or(0); - let (status_code, status_message) = self - .response - .status - .as_ref() - .map_or((0, "".to_owned()), |&RawStatus(ref code, ref text)| { - (*code, text.clone().into_owned()) - }); + let (status_code, status_message) = self.response.status.as_ref() + .map_or((0, "".to_owned()), |(code, text)| (code.as_u16(), text.clone())); // TODO: Send the correct values for remoteAddress and remotePort and http_version. ResponseStartMsg { httpVersion: "HTTP/1.1".to_owned(), @@ -407,9 +393,9 @@ impl NetworkEventActor { pub fn response_content(&self) -> ResponseContentMsg { let mut mString = "".to_owned(); if let Some(ref headers) = self.response.headers { - mString = match headers.get() { - Some(&ContentType(ref mime)) => mime.to_string(), - None => "".to_owned(), + mString = match headers.typed_get::<ContentType>() { + Some(ct) => ct.to_string(), + _ => "".to_owned() }; } // TODO: Set correct values when response's body is sent to the devtools in http_loader. @@ -424,9 +410,9 @@ impl NetworkEventActor { pub fn response_cookies(&self) -> ResponseCookiesMsg { let mut cookies_size = 0; if let Some(ref headers) = self.response.headers { - cookies_size = match headers.get() { - Some(&Cookie(ref cookie)) => cookie.len(), - None => 0, + cookies_size = match headers.typed_get::<Cookie>() { + Some(ref cookie) => cookie.len(), + _ => 0, }; } ResponseCookiesMsg { @@ -439,8 +425,8 @@ impl NetworkEventActor { let mut headers_byte_count = 0; if let Some(ref headers) = self.response.headers { headers_size = headers.len(); - for item in headers.iter() { - headers_byte_count += item.name().len() + item.value_string().len(); + for (name, value) in headers.iter() { + headers_byte_count += name.as_str().len() + value.len(); } } ResponseHeadersMsg { @@ -450,11 +436,10 @@ impl NetworkEventActor { } pub fn request_headers(&self) -> RequestHeadersMsg { - let size = self - .request - .headers - .iter() - .fold(0, |acc, h| acc + h.name().len() + h.value_string().len()); + let size = self.request + .headers + .iter() + .fold(0, |acc, (name, value)| acc + name.as_str().len() + value.len()); RequestHeadersMsg { headers: self.request.headers.len(), headersSize: size, @@ -462,9 +447,9 @@ impl NetworkEventActor { } pub fn request_cookies(&self) -> RequestCookiesMsg { - let cookies_size = match self.request.headers.get() { - Some(&Cookie(ref cookie)) => cookie.len(), - None => 0, + let cookies_size = match self.request.headers.typed_get::<Cookie>() { + Some(ref cookie) => cookie.len(), + _ => 0 }; RequestCookiesMsg { cookies: cookies_size, |