aboutsummaryrefslogtreecommitdiffstats
path: root/components/webdriver_server/lib.rs
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2015-07-10 11:16:27 -0700
committerPatrick Walton <pcwalton@mimiga.net>2015-07-18 12:43:08 -0700
commitb6485a9eafacc29661aa9d0e3cdcd477eefdb66f (patch)
treef35644c31699e771b6b2f646831264e6ae6c2087 /components/webdriver_server/lib.rs
parenta0cf597946446c427c54da363fe989ff68db4270 (diff)
downloadservo-b6485a9eafacc29661aa9d0e3cdcd477eefdb66f.tar.gz
servo-b6485a9eafacc29661aa9d0e3cdcd477eefdb66f.zip
compositing: Make the constellation messages serializable.
Diffstat (limited to 'components/webdriver_server/lib.rs')
-rw-r--r--components/webdriver_server/lib.rs35
1 files changed, 19 insertions, 16 deletions
diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs
index c13ff457ca1..6713fbfe453 100644
--- a/components/webdriver_server/lib.rs
+++ b/components/webdriver_server/lib.rs
@@ -17,11 +17,11 @@ extern crate url;
extern crate util;
extern crate rustc_serialize;
extern crate uuid;
+extern crate ipc_channel;
use msg::constellation_msg::{ConstellationChan, LoadData, FrameId, PipelineId, NavigationDirection,
WebDriverCommandMsg};
use msg::constellation_msg::Msg as ConstellationMsg;
-use std::sync::mpsc::{channel, Receiver};
use msg::webdriver_msg::{WebDriverFrameId, WebDriverScriptCommand, WebDriverJSError, WebDriverJSResult, LoadStatus};
use url::Url;
@@ -35,6 +35,7 @@ use webdriver::server::{self, WebDriverHandler, Session};
use webdriver::error::{WebDriverResult, WebDriverError, ErrorStatus};
use util::task::spawn_named;
use uuid::Uuid;
+use ipc_channel::ipc::{self, IpcReceiver};
use std::borrow::ToOwned;
use rustc_serialize::json::{Json, ToJson};
@@ -133,7 +134,7 @@ impl Handler {
}
fn get_pipeline(&self, frame_id: Option<FrameId>) -> Option<PipelineId> {
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
const_chan.send(ConstellationMsg::GetPipeline(frame_id, sender)).unwrap();
@@ -168,7 +169,7 @@ impl Handler {
let pipeline_id = try!(self.get_root_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let load_data = LoadData::new(url);
let ConstellationChan(ref const_chan) = self.constellation_chan;
@@ -205,7 +206,7 @@ impl Handler {
fn handle_get_title(&self) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.get_root_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
WebDriverScriptCommand::GetTitle(sender));
@@ -236,7 +237,7 @@ impl Handler {
"Unsupported locator strategy"))
}
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd = WebDriverScriptCommand::FindElementCSS(parameters.value.clone(), sender);
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
@@ -276,7 +277,7 @@ impl Handler {
"Selecting frame by id not supported"));
}
let pipeline_id = try!(self.get_frame_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let cmd = WebDriverScriptCommand::GetFrameId(frame_id, sender);
{
let ConstellationChan(ref const_chan) = self.constellation_chan;
@@ -286,7 +287,7 @@ impl Handler {
let frame = match reciever.recv().unwrap() {
Ok(Some((pipeline_id, subpage_id))) => {
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
const_chan.send(ConstellationMsg::GetFrame(pipeline_id, subpage_id, sender)).unwrap();
reciever.recv().unwrap()
@@ -311,7 +312,7 @@ impl Handler {
"Unsupported locator strategy"))
}
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd = WebDriverScriptCommand::FindElementsCSS(parameters.value.clone(), sender);
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
@@ -330,7 +331,7 @@ impl Handler {
fn handle_get_element_text(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.get_frame_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd = WebDriverScriptCommand::GetElementText(element.id.clone(), sender);
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
@@ -345,7 +346,7 @@ impl Handler {
fn handle_get_active_element(&self) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.get_frame_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd = WebDriverScriptCommand::GetActiveElement(sender);
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
@@ -357,7 +358,7 @@ impl Handler {
fn handle_get_element_tag_name(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.get_frame_pipeline());
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd = WebDriverScriptCommand::GetElementTagName(element.id.clone(), sender);
let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id, cmd);
@@ -382,7 +383,8 @@ impl Handler {
Ok(WebDriverResponse::Void)
}
- fn handle_execute_script(&self, parameters: &JavascriptCommandParameters) -> WebDriverResult<WebDriverResponse> {
+ fn handle_execute_script(&self, parameters: &JavascriptCommandParameters)
+ -> WebDriverResult<WebDriverResponse> {
let func_body = &parameters.script;
let args_string = "";
@@ -391,7 +393,7 @@ impl Handler {
// it with a vec of arguments.
let script = format!("(function() {{ {} }})({})", func_body, args_string);
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let command = WebDriverScriptCommand::ExecuteScript(script, sender);
self.execute_script(command, reciever)
}
@@ -405,14 +407,15 @@ impl Handler {
"setTimeout(webdriverTimeout, {}); (function(callback) {{ {} }})({})",
self.script_timeout, func_body, args_string);
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let command = WebDriverScriptCommand::ExecuteAsyncScript(script, sender);
self.execute_script(command, reciever)
}
fn execute_script(&self,
command: WebDriverScriptCommand,
- reciever: Receiver<WebDriverJSResult>) -> WebDriverResult<WebDriverResponse> {
+ reciever: IpcReceiver<WebDriverJSResult>)
+ -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.get_frame_pipeline());
let ConstellationChan(ref const_chan) = self.constellation_chan;
@@ -435,7 +438,7 @@ impl Handler {
let iterations = 30_000 / interval;
for _ in 0..iterations {
- let (sender, reciever) = channel();
+ let (sender, reciever) = ipc::channel().unwrap();
let ConstellationChan(ref const_chan) = self.constellation_chan;
let cmd_msg = WebDriverCommandMsg::TakeScreenshot(pipeline_id, sender);
const_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();