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.rs38
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();
+}