diff options
author | bors-servo <metajack+bors@gmail.com> | 2015-06-17 10:16:27 -0600 |
---|---|---|
committer | bors-servo <metajack+bors@gmail.com> | 2015-06-17 10:16:27 -0600 |
commit | ee54c89e3f801dcd90a494c65ff8cfd975a6be6f (patch) | |
tree | a7b7155e02ca6d7c1c852cd01ba025f13fd68191 /components/webdriver_server/lib.rs | |
parent | ee22ae263515c2804b739ead4c02bc7333c3965c (diff) | |
parent | 22c06307b8a55ae3ce7393d9770918f74ac5e0d8 (diff) | |
download | servo-ee54c89e3f801dcd90a494c65ff8cfd975a6be6f.tar.gz servo-ee54c89e3f801dcd90a494c65ff8cfd975a6be6f.zip |
Auto merge of #6401 - jgraham:load_timeout, r=metajack
<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/6401)
<!-- Reviewable:end -->
Diffstat (limited to 'components/webdriver_server/lib.rs')
-rw-r--r-- | components/webdriver_server/lib.rs | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index 234d1764ab2..c13ff457ca1 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -22,7 +22,7 @@ use msg::constellation_msg::{ConstellationChan, LoadData, FrameId, PipelineId, N WebDriverCommandMsg}; use msg::constellation_msg::Msg as ConstellationMsg; use std::sync::mpsc::{channel, Receiver}; -use msg::webdriver_msg::{WebDriverFrameId, WebDriverScriptCommand, WebDriverJSError, WebDriverJSResult}; +use msg::webdriver_msg::{WebDriverFrameId, WebDriverScriptCommand, WebDriverJSError, WebDriverJSResult, LoadStatus}; use url::Url; use webdriver::command::{WebDriverMessage, WebDriverCommand}; @@ -42,7 +42,7 @@ use rustc_serialize::base64::{Config, ToBase64, CharacterSet, Newline}; use std::collections::BTreeMap; use std::net::SocketAddr; -use std::thread::sleep_ms; +use std::thread::{self, sleep_ms}; pub fn start_server(port: u16, constellation_chan: ConstellationChan) { let handler = Handler::new(constellation_chan); @@ -172,13 +172,22 @@ impl Handler { let load_data = LoadData::new(url); let ConstellationChan(ref const_chan) = self.constellation_chan; - let cmd_msg = WebDriverCommandMsg::LoadUrl(pipeline_id, load_data, sender); + let cmd_msg = WebDriverCommandMsg::LoadUrl(pipeline_id, load_data, sender.clone()); const_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap(); - //Wait to get a load event - reciever.recv().unwrap(); + let timeout = self.load_timeout; + let timeout_chan = sender.clone(); + thread::spawn(move || { + sleep_ms(timeout); + let _ = timeout_chan.send(LoadStatus::LoadTimeout); + }); - Ok(WebDriverResponse::Void) + //Wait to get a load event + match reciever.recv().unwrap() { + LoadStatus::LoadComplete => Ok(WebDriverResponse::Void), + LoadStatus::LoadTimeout => Err(WebDriverError::new(ErrorStatus::Timeout, + "Load timed out")) + } } fn handle_go_back(&self) -> WebDriverResult<WebDriverResponse> { |