diff options
Diffstat (limited to 'components/script/webdriver_handlers.rs')
-rw-r--r-- | components/script/webdriver_handlers.rs | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs new file mode 100644 index 00000000000..4d0aeca61cc --- /dev/null +++ b/components/script/webdriver_handlers.rs @@ -0,0 +1,38 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +use webdriver_traits::{EvaluateJSReply}; +use dom::bindings::conversions::FromJSValConvertible; +use dom::bindings::conversions::StringificationBehavior; +use dom::bindings::js::OptionalRootable; +use dom::window::ScriptHelpers; +use dom::document::DocumentHelpers; +use page::Page; +use msg::constellation_msg::PipelineId; +use script_task::get_page; + +use std::rc::Rc; +use std::sync::mpsc::Sender; + +pub fn handle_evaluate_js(page: &Rc<Page>, pipeline: PipelineId, eval: String, reply: Sender<Result<EvaluateJSReply, ()>>){ + let page = get_page(&*page, pipeline); + let window = page.window().root(); + let cx = window.r().get_cx(); + let rval = window.r().evaluate_js_on_global_with_result(&eval); + + reply.send(if rval.is_undefined() { + Ok(EvaluateJSReply::VoidValue) + } else if rval.is_boolean() { + Ok(EvaluateJSReply::BooleanValue(rval.to_boolean())) + } else if rval.is_double() { + Ok(EvaluateJSReply::NumberValue(FromJSValConvertible::from_jsval(cx, rval, ()).unwrap())) + } else if rval.is_string() { + //FIXME: use jsstring_to_str when jsval grows to_jsstring + Ok(EvaluateJSReply::StringValue(FromJSValConvertible::from_jsval(cx, rval, StringificationBehavior::Default).unwrap())) + } else if rval.is_null() { + Ok(EvaluateJSReply::NullValue) + } else { + Err(()) + }).unwrap(); +} |