Auto merge of #7497 - psdh:devtest7473, r=jdm

tests for devtools integration with network requests/responses

Fixes #7473

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7497)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-09-25 11:35:57 -06:00
commit 8027777e24
8 changed files with 136 additions and 23 deletions

View file

@ -9,13 +9,14 @@
extern crate hyper;
use actor::{Actor, ActorMessageStatus, ActorRegistry};
use devtools_traits::HttpRequest as DevtoolsHttpRequest;
use devtools_traits::HttpResponse as DevtoolsHttpResponse;
use hyper::header::Headers;
use hyper::http::RawStatus;
use hyper::method::Method;
use protocol::JsonPacketStream;
use rustc_serialize::json;
use std::net::TcpStream;
use url::Url;
struct HttpRequest {
url: String,
@ -125,18 +126,18 @@ impl NetworkEventActor {
}
}
pub fn add_request(&mut self, url: Url, method: Method, headers: Headers, body: Option<Vec<u8>>) {
self.request.url = url.serialize();
self.request.method = method.clone();
self.request.headers = headers.clone();
self.request.body = body;
pub fn add_request(&mut self, request: DevtoolsHttpRequest) {
self.request.url = request.url.serialize();
self.request.method = request.method.clone();
self.request.headers = request.headers.clone();
self.request.body = request.body;
}
pub fn add_response(&mut self, headers: Option<Headers>, status: Option<RawStatus>, body: Option<Vec<u8>>) {
self.response.headers = headers.clone();
self.response.status = status.clone();
self.response.body = body.clone();
}
pub fn add_response(&mut self, response: DevtoolsHttpResponse) {
self.response.headers = response.headers.clone();
self.response.status = response.status.clone();
self.response.body = response.body.clone();
}
pub fn event_actor(&self) -> EventActor {
// TODO: Send the correct values for startedDateTime, isXHR, private

View file

@ -335,9 +335,9 @@ fn run_server(sender: Sender<DevtoolsControlMsg>,
let actor = actors.find_mut::<NetworkEventActor>(&netevent_actor_name);
match network_event {
NetworkEvent::HttpRequest(url, method, headers, body) => {
NetworkEvent::HttpRequest(httprequest) => {
//Store the request information in the actor
actor.add_request(url, method, headers, body);
actor.add_request(httprequest);
//Send a networkEvent message to the client
let msg = NetworkEventMsg {
@ -349,9 +349,9 @@ fn run_server(sender: Sender<DevtoolsControlMsg>,
stream.write_json_packet(&msg);
}
}
NetworkEvent::HttpResponse(headers, status, body) => {
NetworkEvent::HttpResponse(httpresponse) => {
//Store the response information in the actor
actor.add_response(headers, status, body);
actor.add_response(httpresponse);
//Send a networkEventUpdate (responseStart) to the client
let msg = NetworkEventUpdateMsg {

View file

@ -258,10 +258,24 @@ pub enum CachedConsoleMessage {
ConsoleAPI(ConsoleAPI),
}
#[derive(Clone)]
#[derive(Debug, PartialEq)]
pub struct HttpRequest {
pub url: Url,
pub method: Method,
pub headers: Headers,
pub body: Option<Vec<u8>>,
}
#[derive(Debug, PartialEq)]
pub struct HttpResponse {
pub headers: Option<Headers>,
pub status: Option<RawStatus>,
pub body: Option<Vec<u8>>,
}
pub enum NetworkEvent {
HttpRequest(Url, Method, Headers, Option<Vec<u8>>),
HttpResponse(Option<Headers>, Option<RawStatus>, Option<Vec<u8>>)
HttpRequest(HttpRequest),
HttpResponse(HttpResponse),
}
impl TimelineMarker {

View file

@ -5,7 +5,8 @@
use cookie;
use cookie_storage::CookieStorage;
use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, NetworkEvent};
use devtools_traits::{ChromeToDevtoolsControlMsg, DevtoolsControlMsg, HttpRequest as DevtoolsHttpRequest};
use devtools_traits::{HttpResponse as DevtoolsHttpResponse, NetworkEvent};
use file_loader;
use flate2::read::{DeflateDecoder, GzDecoder};
use hsts::{HSTSEntry, HSTSList, secure_url};
@ -447,7 +448,8 @@ fn send_request_to_devtools(devtools_chan: Option<Sender<DevtoolsControlMsg>>,
body: Option<Vec<u8>>) {
if let Some(ref chan) = devtools_chan {
let net_event = NetworkEvent::HttpRequest(url, method, headers, body);
let request = DevtoolsHttpRequest { url: url, method: method, headers: headers, body: body };
let net_event = NetworkEvent::HttpRequest(request);
let msg = ChromeToDevtoolsControlMsg::NetworkEvent(request_id, net_event);
chan.send(DevtoolsControlMsg::FromChrome(msg)).unwrap();
@ -459,7 +461,8 @@ fn send_response_to_devtools(devtools_chan: Option<Sender<DevtoolsControlMsg>>,
headers: Option<Headers>,
status: Option<RawStatus>) {
if let Some(ref chan) = devtools_chan {
let net_event_response = NetworkEvent::HttpResponse(headers, status, None);
let response = DevtoolsHttpResponse { headers: headers, status: status, body: None };
let net_event_response = NetworkEvent::HttpResponse(response);
let msg = ChromeToDevtoolsControlMsg::NetworkEvent(request_id, net_event_response);
chan.send(DevtoolsControlMsg::FromChrome(msg)).unwrap();

View file

@ -1130,6 +1130,7 @@ name = "net_tests"
version = "0.0.1"
dependencies = [
"cookie 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)",
"devtools_traits 0.0.1",
"flate2 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.6.14 (registry+https://github.com/rust-lang/crates.io-index)",
"ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)",