diff options
author | David Raifaizen <d-raif@hotmail.com> | 2015-11-29 15:48:23 -0500 |
---|---|---|
committer | David Raifaizen <d-raif@hotmail.com> | 2015-11-29 15:48:23 -0500 |
commit | 8d451076e1762f1cd793049d39caea6bb07b9a2f (patch) | |
tree | fc380c9ae04846ead3cf5273c30cb16185a36bd0 /components/script/webdriver_handlers.rs | |
parent | 6ab205a97e0b19adbb28c9fd18e34faf81dde589 (diff) | |
download | servo-8d451076e1762f1cd793049d39caea6bb07b9a2f.tar.gz servo-8d451076e1762f1cd793049d39caea6bb07b9a2f.zip |
Removed duplicate webdriver_traits file and added webdriver handler for GetWindowSize, IsSelected and IsEnabled
Diffstat (limited to 'components/script/webdriver_handlers.rs')
-rw-r--r-- | components/script/webdriver_handlers.rs | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs index 818ad20abf9..bd5fd9576c7 100644 --- a/components/script/webdriver_handlers.rs +++ b/components/script/webdriver_handlers.rs @@ -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(); +} |