mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Implemented webdriver SetWindowSize.
This commit is contained in:
parent
a4e215974c
commit
5acf0f9a05
5 changed files with 35 additions and 2 deletions
|
@ -4,9 +4,11 @@
|
||||||
|
|
||||||
use constellation_msg::{PipelineId, WindowSizeData};
|
use constellation_msg::{PipelineId, WindowSizeData};
|
||||||
use euclid::rect::Rect;
|
use euclid::rect::Rect;
|
||||||
|
use euclid::size::TypedSize2D;
|
||||||
use ipc_channel::ipc::IpcSender;
|
use ipc_channel::ipc::IpcSender;
|
||||||
use rustc_serialize::json::{Json, ToJson};
|
use rustc_serialize::json::{Json, ToJson};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
use util::geometry::ViewportPx;
|
||||||
|
|
||||||
#[derive(Deserialize, Serialize)]
|
#[derive(Deserialize, Serialize)]
|
||||||
pub enum WebDriverScriptCommand {
|
pub enum WebDriverScriptCommand {
|
||||||
|
@ -24,6 +26,7 @@ pub enum WebDriverScriptCommand {
|
||||||
GetFrameId(WebDriverFrameId, IpcSender<Result<Option<PipelineId>, ()>>),
|
GetFrameId(WebDriverFrameId, IpcSender<Result<Option<PipelineId>, ()>>),
|
||||||
GetUrl(IpcSender<Url>),
|
GetUrl(IpcSender<Url>),
|
||||||
GetWindowSize(IpcSender<Option<WindowSizeData>>),
|
GetWindowSize(IpcSender<Option<WindowSizeData>>),
|
||||||
|
SetWindowSize(TypedSize2D<ViewportPx, f32>, IpcSender<()>),
|
||||||
IsEnabled(String, IpcSender<Result<bool, ()>>),
|
IsEnabled(String, IpcSender<Result<bool, ()>>),
|
||||||
IsSelected(String, IpcSender<Result<bool, ()>>),
|
IsSelected(String, IpcSender<Result<bool, ()>>),
|
||||||
GetTitle(IpcSender<String>)
|
GetTitle(IpcSender<String>)
|
||||||
|
|
|
@ -1018,6 +1018,8 @@ impl ScriptThread {
|
||||||
webdriver_handlers::handle_get_url(&context, pipeline_id, reply),
|
webdriver_handlers::handle_get_url(&context, pipeline_id, reply),
|
||||||
WebDriverScriptCommand::GetWindowSize(reply) =>
|
WebDriverScriptCommand::GetWindowSize(reply) =>
|
||||||
webdriver_handlers::handle_get_window_size(&context, pipeline_id, 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) =>
|
WebDriverScriptCommand::IsEnabled(element_id, reply) =>
|
||||||
webdriver_handlers::handle_is_enabled(&context, pipeline_id, element_id, reply),
|
webdriver_handlers::handle_is_enabled(&context, pipeline_id, element_id, reply),
|
||||||
WebDriverScriptCommand::IsSelected(element_id, reply) =>
|
WebDriverScriptCommand::IsSelected(element_id, reply) =>
|
||||||
|
|
|
@ -25,7 +25,7 @@ use dom::node::Node;
|
||||||
use dom::window::ScriptHelpers;
|
use dom::window::ScriptHelpers;
|
||||||
use euclid::point::Point2D;
|
use euclid::point::Point2D;
|
||||||
use euclid::rect::Rect;
|
use euclid::rect::Rect;
|
||||||
use euclid::size::Size2D;
|
use euclid::size::{Size2D, TypedSize2D};
|
||||||
use ipc_channel::ipc::IpcSender;
|
use ipc_channel::ipc::IpcSender;
|
||||||
use js::jsapi::JSContext;
|
use js::jsapi::JSContext;
|
||||||
use js::jsapi::{HandleValue, RootedValue};
|
use js::jsapi::{HandleValue, RootedValue};
|
||||||
|
@ -34,6 +34,7 @@ use msg::constellation_msg::{PipelineId, WindowSizeData};
|
||||||
use msg::webdriver_msg::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
|
use msg::webdriver_msg::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
|
||||||
use script_thread::get_browsing_context;
|
use script_thread::get_browsing_context;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
use util::geometry::ViewportPx;
|
||||||
use util::str::DOMString;
|
use util::str::DOMString;
|
||||||
|
|
||||||
fn find_node_by_unique_id(context: &BrowsingContext,
|
fn find_node_by_unique_id(context: &BrowsingContext,
|
||||||
|
@ -290,6 +291,18 @@ pub fn handle_get_window_size(context: &BrowsingContext,
|
||||||
reply.send(size).unwrap();
|
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,
|
pub fn handle_is_enabled(context: &BrowsingContext,
|
||||||
pipeline: PipelineId,
|
pipeline: PipelineId,
|
||||||
element_id: String,
|
element_id: String,
|
||||||
|
|
|
@ -13,6 +13,7 @@ compositing = {path = "../compositing"}
|
||||||
msg = {path = "../msg"}
|
msg = {path = "../msg"}
|
||||||
plugins = {path = "../plugins"}
|
plugins = {path = "../plugins"}
|
||||||
util = {path = "../util"}
|
util = {path = "../util"}
|
||||||
|
euclid = {version = "0.6.4", features = ["plugins"]}
|
||||||
ipc-channel = {git = "https://github.com/servo/ipc-channel"}
|
ipc-channel = {git = "https://github.com/servo/ipc-channel"}
|
||||||
image = "0.10"
|
image = "0.10"
|
||||||
log = "0.3.5"
|
log = "0.3.5"
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#![deny(unsafe_code)]
|
#![deny(unsafe_code)]
|
||||||
|
|
||||||
extern crate compositing;
|
extern crate compositing;
|
||||||
|
extern crate euclid;
|
||||||
extern crate hyper;
|
extern crate hyper;
|
||||||
extern crate image;
|
extern crate image;
|
||||||
extern crate ipc_channel;
|
extern crate ipc_channel;
|
||||||
|
@ -25,6 +26,7 @@ extern crate webdriver;
|
||||||
mod keys;
|
mod keys;
|
||||||
|
|
||||||
use compositing::CompositorMsg as ConstellationMsg;
|
use compositing::CompositorMsg as ConstellationMsg;
|
||||||
|
use euclid::Size2D;
|
||||||
use hyper::method::Method::{self, Post};
|
use hyper::method::Method::{self, Post};
|
||||||
use image::{DynamicImage, ImageFormat, RgbImage};
|
use image::{DynamicImage, ImageFormat, RgbImage};
|
||||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
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 util::thread::spawn_named;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
use webdriver::command::{GetParameters, JavascriptCommandParameters, LocatorParameters};
|
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::command::{WebDriverCommand, WebDriverExtensionCommand, WebDriverMessage};
|
||||||
use webdriver::common::{LocatorStrategy, WebElement};
|
use webdriver::common::{LocatorStrategy, WebElement};
|
||||||
use webdriver::error::{ErrorStatus, WebDriverError, WebDriverResult};
|
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> {
|
fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
|
|
||||||
|
@ -767,6 +780,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
|
||||||
WebDriverCommand::Get(ref parameters) => self.handle_get(parameters),
|
WebDriverCommand::Get(ref parameters) => self.handle_get(parameters),
|
||||||
WebDriverCommand::GetCurrentUrl => self.handle_current_url(),
|
WebDriverCommand::GetCurrentUrl => self.handle_current_url(),
|
||||||
WebDriverCommand::GetWindowSize => self.handle_window_size(),
|
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::IsEnabled(ref element) => self.handle_is_enabled(element),
|
||||||
WebDriverCommand::IsSelected(ref element) => self.handle_is_selected(element),
|
WebDriverCommand::IsSelected(ref element) => self.handle_is_selected(element),
|
||||||
WebDriverCommand::GoBack => self.handle_go_back(),
|
WebDriverCommand::GoBack => self.handle_go_back(),
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue