diff options
Diffstat (limited to 'components/script/script_task.rs')
-rw-r--r-- | components/script/script_task.rs | 34 |
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); } |