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

Added a timeout to SetWindowSize.

  • Loading branch information
asajeffrey committed May 20, 2016
commit 3962ffc5015e6e4b4e9ad7f0da5c7fd9b3de3718
@@ -293,7 +293,7 @@ impl<'a> Iterator for FrameTreeIterator<'a> {

struct WebDriverData {
load_channel: Option<(PipelineId, IpcSender<webdriver_msg::LoadStatus>)>,
resize_channel: Option<IpcSender<WindowSizeData>>,
resize_channel: Option<IpcSender<Option<WindowSizeData>>>,
}

impl WebDriverData {
@@ -1713,7 +1713,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF>
}

if let Some(resize_channel) = self.webdriver.resize_channel.take() {
let _ = resize_channel.send(new_size);
let _ = resize_channel.send(Some(new_size));
}

self.window_size = new_size;
@@ -193,7 +193,7 @@ pub enum WebDriverCommandMsg {
Refresh(PipelineId, IpcSender<LoadStatus>),
ScriptCommand(PipelineId, WebDriverScriptCommand),
SendKeys(PipelineId, Vec<(Key, KeyModifiers, KeyState)>),
SetWindowSize(PipelineId, Size2D<u32>, IpcSender<WindowSizeData>),
SetWindowSize(PipelineId, Size2D<u32>, IpcSender<Option<WindowSizeData>>),
TakeScreenshot(PipelineId, IpcSender<Option<Image>>),
}

@@ -25,16 +25,15 @@ use dom::node::Node;
use dom::window::ScriptHelpers;
use euclid::point::Point2D;
use euclid::rect::Rect;
use euclid::size::{Size2D, TypedSize2D};
use euclid::size::Size2D;
use ipc_channel::ipc::IpcSender;
use js::jsapi::JSContext;
use js::jsapi::{HandleValue, RootedValue};
use js::jsval::UndefinedValue;
use msg::constellation_msg::{PipelineId, WindowSizeData};
use msg::constellation_msg::PipelineId;
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,
@@ -83,6 +83,7 @@ struct Handler {
constellation_chan: Sender<ConstellationMsg>,
script_timeout: u32,
load_timeout: u32,
resize_timeout: u32,
implicit_wait_timeout: u32
}

@@ -222,6 +223,7 @@ impl Handler {
constellation_chan: constellation_chan,
script_timeout: 30_000,
load_timeout: 300_000,
resize_timeout: 30_000,
implicit_wait_timeout: 0
}
}
@@ -372,14 +374,24 @@ impl Handler {
let (sender, receiver) = ipc::channel().unwrap();
let size = Size2D::new(params.width as u32, params.height as u32);
let pipeline_id = try!(self.root_pipeline());
let cmd_msg = WebDriverCommandMsg::SetWindowSize(pipeline_id, size, sender);
let cmd_msg = WebDriverCommandMsg::SetWindowSize(pipeline_id, size, sender.clone());

self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();

let window_size = receiver.recv().unwrap();
let vp = window_size.visible_viewport;
let window_size_response = WindowSizeResponse::new(vp.width.get() as u64, vp.height.get() as u64);
Ok(WebDriverResponse::WindowSize(window_size_response))
let timeout = self.resize_timeout;
thread::spawn(move || {
thread::sleep(Duration::from_millis(timeout as u64));
let _ = sender.send(None);
});

match receiver.recv().unwrap() {
Some(window_size) => {
let vp = window_size.visible_viewport;
let window_size_response = WindowSizeResponse::new(vp.width.get() as u64, vp.height.get() as u64);
Ok(WebDriverResponse::WindowSize(window_size_response))
},
None => Err(WebDriverError::new(ErrorStatus::Timeout, "Resize timed out")),
}
}

fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.