mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +01:00
Added a timeout to SetWindowSize.
This commit is contained in:
parent
e2203f81d3
commit
3962ffc501
4 changed files with 22 additions and 11 deletions
|
@ -293,7 +293,7 @@ impl<'a> Iterator for FrameTreeIterator<'a> {
|
||||||
|
|
||||||
struct WebDriverData {
|
struct WebDriverData {
|
||||||
load_channel: Option<(PipelineId, IpcSender<webdriver_msg::LoadStatus>)>,
|
load_channel: Option<(PipelineId, IpcSender<webdriver_msg::LoadStatus>)>,
|
||||||
resize_channel: Option<IpcSender<WindowSizeData>>,
|
resize_channel: Option<IpcSender<Option<WindowSizeData>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WebDriverData {
|
impl WebDriverData {
|
||||||
|
@ -1713,7 +1713,7 @@ impl<LTF: LayoutThreadFactory, STF: ScriptThreadFactory> Constellation<LTF, STF>
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(resize_channel) = self.webdriver.resize_channel.take() {
|
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;
|
self.window_size = new_size;
|
||||||
|
|
|
@ -193,7 +193,7 @@ pub enum WebDriverCommandMsg {
|
||||||
Refresh(PipelineId, IpcSender<LoadStatus>),
|
Refresh(PipelineId, IpcSender<LoadStatus>),
|
||||||
ScriptCommand(PipelineId, WebDriverScriptCommand),
|
ScriptCommand(PipelineId, WebDriverScriptCommand),
|
||||||
SendKeys(PipelineId, Vec<(Key, KeyModifiers, KeyState)>),
|
SendKeys(PipelineId, Vec<(Key, KeyModifiers, KeyState)>),
|
||||||
SetWindowSize(PipelineId, Size2D<u32>, IpcSender<WindowSizeData>),
|
SetWindowSize(PipelineId, Size2D<u32>, IpcSender<Option<WindowSizeData>>),
|
||||||
TakeScreenshot(PipelineId, IpcSender<Option<Image>>),
|
TakeScreenshot(PipelineId, IpcSender<Option<Image>>),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,16 +25,15 @@ 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, TypedSize2D};
|
use euclid::size::Size2D;
|
||||||
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};
|
||||||
use js::jsval::UndefinedValue;
|
use js::jsval::UndefinedValue;
|
||||||
use msg::constellation_msg::{PipelineId, WindowSizeData};
|
use msg::constellation_msg::PipelineId;
|
||||||
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,
|
||||||
|
|
|
@ -83,6 +83,7 @@ struct Handler {
|
||||||
constellation_chan: Sender<ConstellationMsg>,
|
constellation_chan: Sender<ConstellationMsg>,
|
||||||
script_timeout: u32,
|
script_timeout: u32,
|
||||||
load_timeout: u32,
|
load_timeout: u32,
|
||||||
|
resize_timeout: u32,
|
||||||
implicit_wait_timeout: u32
|
implicit_wait_timeout: u32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,6 +223,7 @@ impl Handler {
|
||||||
constellation_chan: constellation_chan,
|
constellation_chan: constellation_chan,
|
||||||
script_timeout: 30_000,
|
script_timeout: 30_000,
|
||||||
load_timeout: 300_000,
|
load_timeout: 300_000,
|
||||||
|
resize_timeout: 30_000,
|
||||||
implicit_wait_timeout: 0
|
implicit_wait_timeout: 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -372,14 +374,24 @@ impl Handler {
|
||||||
let (sender, receiver) = ipc::channel().unwrap();
|
let (sender, receiver) = ipc::channel().unwrap();
|
||||||
let size = Size2D::new(params.width as u32, params.height as u32);
|
let size = Size2D::new(params.width as u32, params.height as u32);
|
||||||
let pipeline_id = try!(self.root_pipeline());
|
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();
|
self.constellation_chan.send(ConstellationMsg::WebDriverCommand(cmd_msg)).unwrap();
|
||||||
|
|
||||||
let window_size = receiver.recv().unwrap();
|
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 vp = window_size.visible_viewport;
|
||||||
let window_size_response = WindowSizeResponse::new(vp.width.get() as u64, vp.height.get() as u64);
|
let window_size_response = WindowSizeResponse::new(vp.width.get() as u64, vp.height.get() as u64);
|
||||||
Ok(WebDriverResponse::WindowSize(window_size_response))
|
Ok(WebDriverResponse::WindowSize(window_size_response))
|
||||||
|
},
|
||||||
|
None => Err(WebDriverError::new(ErrorStatus::Timeout, "Resize timed out")),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
fn handle_is_enabled(&self, element: &WebElement) -> WebDriverResult<WebDriverResponse> {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue