aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/webdriver_handlers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/webdriver_handlers.rs')
-rw-r--r--components/script/webdriver_handlers.rs52
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();
+}