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

Implemented webdriver SetWindowSize. #11179

Merged
merged 4 commits into from May 23, 2016
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Next

Implemented webdriver SetWindowSize.

  • Loading branch information
asajeffrey committed May 20, 2016
commit 5acf0f9a0515c8358b3170f8d9a117c50b41bd7d
@@ -4,9 +4,11 @@

use constellation_msg::{PipelineId, WindowSizeData};
use euclid::rect::Rect;
use euclid::size::TypedSize2D;
use ipc_channel::ipc::IpcSender;
use rustc_serialize::json::{Json, ToJson};
use url::Url;
use util::geometry::ViewportPx;

#[derive(Deserialize, Serialize)]
pub enum WebDriverScriptCommand {
@@ -24,6 +26,7 @@ pub enum WebDriverScriptCommand {
GetFrameId(WebDriverFrameId, IpcSender<Result<Option<PipelineId>, ()>>),
GetUrl(IpcSender<Url>),
GetWindowSize(IpcSender<Option<WindowSizeData>>),
SetWindowSize(TypedSize2D<ViewportPx, f32>, IpcSender<()>),
IsEnabled(String, IpcSender<Result<bool, ()>>),
IsSelected(String, IpcSender<Result<bool, ()>>),
GetTitle(IpcSender<String>)
@@ -1018,6 +1018,8 @@ impl ScriptThread {
webdriver_handlers::handle_get_url(&context, pipeline_id, reply),
WebDriverScriptCommand::GetWindowSize(reply) =>
webdriver_handlers::handle_get_window_size(&context, pipeline_id, reply),
WebDriverScriptCommand::SetWindowSize(size, reply) =>
webdriver_handlers::handle_set_window_size(&context, pipeline_id, size, reply),
WebDriverScriptCommand::IsEnabled(element_id, reply) =>
webdriver_handlers::handle_is_enabled(&context, pipeline_id, element_id, reply),
WebDriverScriptCommand::IsSelected(element_id, reply) =>
@@ -25,7 +25,7 @@ use dom::node::Node;
use dom::window::ScriptHelpers;
use euclid::point::Point2D;
use euclid::rect::Rect;
use euclid::size::Size2D;
use euclid::size::{Size2D, TypedSize2D};
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use js::jsapi::{HandleValue, RootedValue};
@@ -34,6 +34,7 @@ use msg::constellation_msg::{PipelineId, WindowSizeData};
use msg::webdriver_msg::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
use script_thread::get_browsing_context;
use url::Url;
use util::geometry::ViewportPx;
use util::str::DOMString;

fn find_node_by_unique_id(context: &BrowsingContext,
@@ -290,6 +291,18 @@ pub fn handle_get_window_size(context: &BrowsingContext,
reply.send(size).unwrap();
}

pub fn handle_set_window_size(context: &BrowsingContext,
_pipeline: PipelineId,
size: TypedSize2D<ViewportPx, f32>,
reply: IpcSender<()>) {
let window = context.active_window();
// TODO: converting to a dimensionless size is error-prone
let untyped = size.to_untyped();
// TODO: when window puts in security checks for resize, we will need to rewrite this
window.ResizeTo(untyped.width as i32, untyped.height as i32);
reply.send(()).unwrap();
}

pub fn handle_is_enabled(context: &BrowsingContext,
pipeline: PipelineId,
element_id: String,
@@ -13,6 +13,7 @@ compositing = {path = "../compositing"}
msg = {path = "../msg"}
plugins = {path = "../plugins"}
util = {path = "../util"}
euclid = {version = "0.6.4", features = ["plugins"]}
ipc-channel = {git = "https://github.com/servo/ipc-channel"}
image = "0.10"
log = "0.3.5"
@@ -11,6 +11,7 @@
#![deny(unsafe_code)]

extern crate compositing;
extern crate euclid;
extern crate hyper;
extern crate image;
extern crate ipc_channel;
@@ -25,6 +26,7 @@ extern crate webdriver;
mod keys;

use compositing::CompositorMsg as ConstellationMsg;
use euclid::Size2D;
use hyper::method::Method::{self, Post};
use image::{DynamicImage, ImageFormat, RgbImage};
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
@@ -46,7 +48,8 @@ use util::prefs::{get_pref, reset_all_prefs, reset_pref, set_pref, PrefValue};
use util::thread::spawn_named;
use uuid::Uuid;
use webdriver::command::{GetParameters, JavascriptCommandParameters, LocatorParameters};
use webdriver::command::{Parameters, SendKeysParameters, SwitchToFrameParameters, TimeoutsParameters};
use webdriver::command::{Parameters, SendKeysParameters, SwitchToFrameParameters};
use webdriver::command::{TimeoutsParameters, WindowSizeParameters};
use webdriver::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverMessage};
use webdriver::common::{LocatorStrategy, WebElement};
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
@@ -367,6 +370,16 @@ impl Handler {
}
}

fn handle_set_window_size(&self, params: &WindowSizeParameters) -> WebDriverResult<WebDriverResponse> {
let (sender, receiver) = ipc::channel().unwrap();
let size = Size2D::from_untyped(&Size2D::new(params.width as f32, params.height as f32));

try!(self.root_script_command(WebDriverScriptCommand::SetWindowSize(size, sender)));
receiver.recv().unwrap();

Ok(WebDriverResponse::Void)
}

fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
let (sender, receiver) = ipc::channel().unwrap();

@@ -767,6 +780,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
WebDriverCommand::Get(ref parameters) => self.handle_get(parameters),
WebDriverCommand::GetCurrentUrl => self.handle_current_url(),
WebDriverCommand::GetWindowSize => self.handle_window_size(),
WebDriverCommand::SetWindowSize(ref size) => self.handle_set_window_size(size),
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.