mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Removed duplicate webdriver_traits file and added webdriver handler for GetWindowSize, IsSelected and IsEnabled
This commit is contained in:
parent
6ab205a97e
commit
8d451076e1
5 changed files with 116 additions and 54 deletions
|
@ -7,6 +7,8 @@ use dom::bindings::codegen::Bindings::DocumentBinding::DocumentMethods;
|
|||
use dom::bindings::codegen::Bindings::ElementBinding::ElementMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLElementBinding::HTMLElementMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLIFrameElementBinding::HTMLIFrameElementMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLInputElementBinding::HTMLInputElementMethods;
|
||||
use dom::bindings::codegen::Bindings::HTMLOptionElementBinding::HTMLOptionElementMethods;
|
||||
use dom::bindings::codegen::Bindings::NodeBinding::NodeMethods;
|
||||
use dom::bindings::codegen::Bindings::NodeListBinding::NodeListMethods;
|
||||
use dom::bindings::codegen::Bindings::WindowBinding::WindowMethods;
|
||||
|
@ -16,13 +18,15 @@ use dom::bindings::js::Root;
|
|||
use dom::element::Element;
|
||||
use dom::htmlelement::HTMLElement;
|
||||
use dom::htmliframeelement::HTMLIFrameElement;
|
||||
use dom::htmlinputelement::HTMLInputElement;
|
||||
use dom::htmloptionelement::HTMLOptionElement;
|
||||
use dom::node::Node;
|
||||
use dom::window::ScriptHelpers;
|
||||
use ipc_channel::ipc::IpcSender;
|
||||
use js::jsapi::JSContext;
|
||||
use js::jsapi::{HandleValue, RootedValue};
|
||||
use js::jsval::UndefinedValue;
|
||||
use msg::constellation_msg::PipelineId;
|
||||
use msg::constellation_msg::{PipelineId, WindowSizeData};
|
||||
use msg::webdriver_msg::{WebDriverFrameId, WebDriverJSError, WebDriverJSResult, WebDriverJSValue};
|
||||
use page::Page;
|
||||
use script_task::get_page;
|
||||
|
@ -242,3 +246,49 @@ pub fn handle_get_url(page: &Rc<Page>,
|
|||
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_is_enabled(page: &Rc<Page>,
|
||||
pipeline: PipelineId,
|
||||
element_id: String,
|
||||
reply: IpcSender<Result<bool, ()>>) {
|
||||
reply.send(match find_node_by_unique_id(page, pipeline, element_id) {
|
||||
Some(ref node) => {
|
||||
match node.downcast::<Element>() {
|
||||
Some(elem) => Ok(elem.get_enabled_state()),
|
||||
None => Err(())
|
||||
}
|
||||
},
|
||||
None => Err(())
|
||||
}).unwrap();
|
||||
}
|
||||
|
||||
pub fn handle_is_selected(page: &Rc<Page>,
|
||||
pipeline: PipelineId,
|
||||
element_id: String,
|
||||
reply: IpcSender<Result<bool, ()>>) {
|
||||
reply.send(match find_node_by_unique_id(page, pipeline, element_id) {
|
||||
Some(ref node) => {
|
||||
if let Some(input_element) = node.downcast::<HTMLInputElement>() {
|
||||
Ok(input_element.Checked())
|
||||
}
|
||||
else if let Some(option_element) = node.downcast::<HTMLOptionElement>() {
|
||||
Ok(option_element.Selected())
|
||||
}
|
||||
else if let Some(_) = node.downcast::<HTMLElement>() {
|
||||
Ok(false) // regular elements are not selectable
|
||||
}
|
||||
else {
|
||||
Err(())
|
||||
}
|
||||
},
|
||||
None => Err(())
|
||||
}).unwrap();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue