aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_task.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r--components/script/script_task.rs34
1 files changed, 23 insertions, 11 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 775e45b29a8..504a4f169b3 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -81,7 +81,7 @@ use hyper::header::{LastModified, Headers};
use js::jsapi::{JS_SetWrapObjectCallbacks, JS_SetExtraGCRootsTracer};
use js::jsapi::{JSContext, JSRuntime, JSObject, JSTracer};
use js::jsapi::{JS_SetGCCallback, JSGCStatus, JSGC_BEGIN, JSGC_END};
-use js::rust::{Runtime, RtUtils};
+use js::rust::Runtime;
use url::Url;
use libc;
@@ -315,7 +315,7 @@ pub struct ScriptTask {
devtools_marker_sender: RefCell<Option<Sender<TimelineMarker>>>,
/// The JavaScript runtime.
- js_runtime: Runtime,
+ js_runtime: Rc<Runtime>,
mouse_over_targets: DOMRefCell<Vec<JS<Node>>>
}
@@ -349,7 +349,7 @@ impl<'a> Drop for ScriptMemoryFailsafe<'a> {
let page = owner.page.borrow_for_script_deallocation();
for page in page.iter() {
let window = page.window_for_script_deallocation();
- (*window.unsafe_get()).clear_js_context_for_script_deallocation();
+ (*window.unsafe_get()).clear_js_runtime_for_script_deallocation();
}
}
}
@@ -494,7 +494,7 @@ impl ScriptTask {
devtools_markers: RefCell::new(HashSet::new()),
devtools_marker_sender: RefCell::new(None),
- js_runtime: runtime,
+ js_runtime: Rc::new(runtime),
mouse_over_targets: DOMRefCell::new(vec!())
}
}
@@ -800,6 +800,16 @@ impl ScriptTask {
match msg {
WebDriverScriptCommand::EvaluateJS(script, reply) =>
webdriver_handlers::handle_evaluate_js(&page, pipeline_id, script, reply),
+ WebDriverScriptCommand::FindElementCSS(selector, reply) =>
+ webdriver_handlers::handle_find_element_css(&page, pipeline_id, selector, reply),
+ WebDriverScriptCommand::FindElementsCSS(selector, reply) =>
+ webdriver_handlers::handle_find_elements_css(&page, pipeline_id, selector, reply),
+ WebDriverScriptCommand::GetActiveElement(reply) =>
+ webdriver_handlers::handle_get_active_element(&page, pipeline_id, reply),
+ WebDriverScriptCommand::GetElementTagName(node_id, reply) =>
+ webdriver_handlers::handle_get_name(&page, pipeline_id, node_id, reply),
+ WebDriverScriptCommand::GetElementText(node_id, reply) =>
+ webdriver_handlers::handle_get_text(&page, pipeline_id, node_id, reply),
WebDriverScriptCommand::GetTitle(reply) =>
webdriver_handlers::handle_get_title(&page, pipeline_id, reply)
}
@@ -829,7 +839,7 @@ impl ScriptTask {
let window = inner_page.window().root();
if window.r().set_page_clip_rect_with_new_viewport(rect) {
let page = get_page(page, id);
- self.force_reflow(&*page, ReflowReason::Viewport);
+ self.rebuild_and_force_reflow(&*page, ReflowReason::Viewport);
}
return;
}
@@ -918,7 +928,7 @@ impl ScriptTask {
let needed_reflow = page.set_reflow_status(false);
if needed_reflow {
- self.force_reflow(&*page, ReflowReason::CachedPageNeededReflow);
+ self.rebuild_and_force_reflow(&*page, ReflowReason::CachedPageNeededReflow);
}
let window = page.window().root();
@@ -1151,7 +1161,7 @@ impl ScriptTask {
let mut page_remover = AutoPageRemover::new(self, page_to_remove);
// Create the window and document objects.
- let window = Window::new(self.js_runtime.cx.clone(),
+ let window = Window::new(self.js_runtime.clone(),
page.clone(),
self.chan.clone(),
self.image_cache_channel.clone(),
@@ -1242,8 +1252,8 @@ impl ScriptTask {
self.compositor.borrow_mut().scroll_fragment_point(pipeline_id, LayerId::null(), point);
}
- /// Reflows non-incrementally.
- fn force_reflow(&self, page: &Page, reason: ReflowReason) {
+ /// Reflows non-incrementally, rebuilding the entire layout tree in the process.
+ fn rebuild_and_force_reflow(&self, page: &Page, reason: ReflowReason) {
let document = page.document().root();
document.r().dirty_all_nodes();
let window = window_from_node(document.r()).root();
@@ -1364,7 +1374,9 @@ impl ScriptTask {
let page = get_page(&self.root_page(), pipeline_id);
let window = page.window().root();
window.r().set_window_size(new_size);
- self.force_reflow(&*page, ReflowReason::WindowResize);
+ window.r().force_reflow(ReflowGoal::ForDisplay,
+ ReflowQueryType::NoQuery,
+ ReflowReason::WindowResize);
let document = page.document().root();
let fragment_node = window.r().steal_fragment_name()
@@ -1522,7 +1534,7 @@ fn shut_down_layout(page_tree: &Rc<Page>, exit_type: PipelineExitType) {
// Drop our references to the JSContext and DOM objects.
for page in page_tree.iter() {
let window = page.window().root();
- window.r().clear_js_context();
+ window.r().clear_js_runtime();
// Sever the connection between the global and the DOM tree
page.set_frame(None);
}