Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Webdriver - SetWindowSize/Close #8774

Closed
Closed
Changes from all commits
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Added webdriver handlers for set size and close

  • Loading branch information
craftytrickster committed Dec 2, 2015
commit d0e693707a64add2b64c64d0558008e07d154b16
@@ -22,6 +22,8 @@ pub enum WebDriverScriptCommand {
GetFrameId(WebDriverFrameId, IpcSender<Result<Option<PipelineId>, ()>>),
GetUrl(IpcSender<Url>),
GetWindowSize(IpcSender<Option<WindowSizeData>>),
SetWindowSize(i32, i32, IpcSender<WebDriverJSResult>),
Close(IpcSender<Result<(), ()>>),
IsEnabled(String, IpcSender<Result<bool, ()>>),
IsSelected(String, IpcSender<Result<bool, ()>>),
GetTitle(IpcSender<String>)
@@ -1118,9 +1118,13 @@ impl ScriptTask {
WebDriverScriptCommand::GetFrameId(frame_id, reply) =>
webdriver_handlers::handle_get_frame_id(&page, pipeline_id, frame_id, reply),
WebDriverScriptCommand::GetUrl(reply) =>
webdriver_handlers::handle_get_url(&page, pipeline_id, reply),
webdriver_handlers::handle_get_url(&page, reply),
WebDriverScriptCommand::GetWindowSize(reply) =>
webdriver_handlers::handle_get_window_size(&page, pipeline_id, reply),
webdriver_handlers::handle_get_window_size(&page, reply),
WebDriverScriptCommand::SetWindowSize(width, height, reply) =>
webdriver_handlers::handle_set_window_size(&page, width, height, reply),
WebDriverScriptCommand::Close(reply) =>
webdriver_handlers::handle_close(&page, reply),
WebDriverScriptCommand::IsEnabled(element_id, reply) =>
webdriver_handlers::handle_is_enabled(&page, pipeline_id, element_id, reply),
WebDriverScriptCommand::IsSelected(element_id, reply) =>
@@ -240,21 +240,35 @@ pub fn handle_get_css(page: &Rc<Page>,
}

pub fn handle_get_url(page: &Rc<Page>,
_pipeline: PipelineId,
reply: IpcSender<Url>) {
let document = page.document();
let url = document.url();
reply.send((*url).clone()).unwrap();
}

pub fn handle_get_window_size(page: &Rc<Page>,
_pipeline: PipelineId,
reply: IpcSender<Option<WindowSizeData>>) {
let window = page.window();
let size = window.window_size();
reply.send(size).unwrap();
}

pub fn handle_set_window_size(page: &Rc<Page>,
width: i32,
height: i32,
reply: IpcSender<WebDriverJSResult>) {
let window = page.window();
window.ResizeTo(width, height);
reply.send(Ok(WebDriverJSValue::Null)).unwrap();
}

pub fn handle_close(page: &Rc<Page>,
reply: IpcSender<Result<(), ()>>) {
let window = page.window();
window.Close();
reply.send(Ok(())).unwrap();
}

pub fn handle_is_enabled(page: &Rc<Page>,
pipeline: PipelineId,
element_id: String,
@@ -46,7 +46,7 @@ use util::task::spawn_named;
use uuid::Uuid;
use webdriver::command::{GetParameters, JavascriptCommandParameters, LocatorParameters};
use webdriver::command::{Parameters, SendKeysParameters, SwitchToFrameParameters, TimeoutsParameters};
use webdriver::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverMessage};
use webdriver::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverMessage, WindowSizeParameters};
use webdriver::common::{LocatorStrategy, WebElement};
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
use webdriver::httpapi::{WebDriverExtensionRoute};
@@ -346,7 +346,7 @@ impl Handler {
Ok(WebDriverResponse::Generic(ValueResponse::new(url.serialize().to_json())))
}

fn handle_window_size(&self) -> WebDriverResult<WebDriverResponse> {
fn handle_get_window_size(&self) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.root_pipeline());

let (sender, receiver) = ipc::channel().unwrap();
@@ -365,6 +365,38 @@ impl Handler {
}
}

fn handle_set_window_size(&self, size: &WindowSizeParameters) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.root_pipeline());

let (sender, receiver) = ipc::channel().unwrap();

let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
WebDriverScriptCommand::SetWindowSize(size.width as i32,
size.height as i32,
sender));
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();

match receiver.recv().unwrap() {
Ok(response) => Ok(WebDriverResponse::Generic(ValueResponse::new(response.to_json()))),
Err(_) => Err(WebDriverError::new(ErrorStatus::NoSuchWindow, "Unable to set window size"))
}
}

fn handle_close(&self) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.root_pipeline());

let (sender, receiver) = ipc::channel().unwrap();

let cmd_msg = WebDriverCommandMsg::ScriptCommand(pipeline_id,
WebDriverScriptCommand::Close(sender));
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();

match receiver.recv().unwrap() {
Ok(response) => self.handle_window_handles(),
Err(_) => Err(WebDriverError::new(ErrorStatus::NoSuchWindow, "Unable to close window"))
}
}

fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
let pipeline_id = try!(self.root_pipeline());

@@ -782,7 +814,9 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
WebDriverCommand::NewSession => self.handle_new_session(),
WebDriverCommand::Get(ref parameters) => self.handle_get(parameters),
WebDriverCommand::GetCurrentUrl => self.handle_current_url(),
WebDriverCommand::GetWindowSize => self.handle_window_size(),
WebDriverCommand::GetWindowSize => self.handle_get_window_size(),
WebDriverCommand::SetWindowSize(ref size) => self.handle_set_window_size(size),
WebDriverCommand::Close => self.handle_close(),
WebDriverCommand::IsEnabled(ref element) => self.handle_is_enabled(element),
WebDriverCommand::IsSelected(ref element) => self.handle_is_selected(element),
WebDriverCommand::GoBack => self.handle_go_back(),
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.