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.rs47
1 files changed, 25 insertions, 22 deletions
diff --git a/components/script/script_task.rs b/components/script/script_task.rs
index 5dd6f7c2d02..8595ebf0737 100644
--- a/components/script/script_task.rs
+++ b/components/script/script_task.rs
@@ -168,7 +168,7 @@ pub struct ScriptTask {
/// For communicating load url messages to the constellation
constellation_chan: ConstellationChan,
/// A handle to the compositor for communicating ready state messages.
- compositor: Box<ScriptListener+'static>,
+ compositor: DOMRefCell<Box<ScriptListener+'static>>,
/// For providing instructions to an optional devtools server.
devtools_chan: Option<DevtoolsControlChan>,
@@ -248,25 +248,25 @@ impl ScriptTaskFactory for ScriptTask {
box pair.sender() as Box<Any+Send>
}
- fn create<C:ScriptListener + Send + 'static>(
- _phantom: Option<&mut ScriptTask>,
- id: PipelineId,
- compositor: Box<C>,
- layout_chan: &OpaqueScriptLayoutChannel,
- control_chan: ScriptControlChan,
- control_port: Receiver<ConstellationControlMsg>,
- constellation_chan: ConstellationChan,
- failure_msg: Failure,
- resource_task: ResourceTask,
- image_cache_task: ImageCacheTask,
- devtools_chan: Option<DevtoolsControlChan>,
- window_size: WindowSizeData) {
+ fn create<C>(_phantom: Option<&mut ScriptTask>,
+ id: PipelineId,
+ compositor: C,
+ layout_chan: &OpaqueScriptLayoutChannel,
+ control_chan: ScriptControlChan,
+ control_port: Receiver<ConstellationControlMsg>,
+ constellation_chan: ConstellationChan,
+ failure_msg: Failure,
+ resource_task: ResourceTask,
+ image_cache_task: ImageCacheTask,
+ devtools_chan: Option<DevtoolsControlChan>,
+ window_size: WindowSizeData)
+ where C: ScriptListener + Send + 'static {
let ConstellationChan(const_chan) = constellation_chan.clone();
let (script_chan, script_port) = channel();
let layout_chan = LayoutChan(layout_chan.sender());
spawn_named_with_send_on_failure("ScriptTask", task_state::Script, proc() {
let script_task = ScriptTask::new(id,
- compositor as Box<ScriptListener>,
+ box compositor as Box<ScriptListener>,
layout_chan,
script_port,
ScriptChan(script_chan),
@@ -350,7 +350,7 @@ impl ScriptTask {
control_chan: control_chan,
control_port: control_port,
constellation_chan: constellation_chan,
- compositor: compositor,
+ compositor: DOMRefCell::new(compositor),
devtools_chan: devtools_chan,
devtools_port: devtools_receiver,
@@ -671,7 +671,7 @@ impl ScriptTask {
*layout_join_port = None;
}
- self.compositor.set_ready_state(pipeline_id, FinishedLoading);
+ self.compositor.borrow_mut().set_ready_state(pipeline_id, FinishedLoading);
if page.pending_reflows.get() > 0 {
page.pending_reflows.set(0);
@@ -709,7 +709,7 @@ impl ScriptTask {
// TODO(tkuehn): currently there is only one window,
// so this can afford to be naive and just shut down the
// compositor. In the future it'll need to be smarter.
- self.compositor.close();
+ self.compositor.borrow_mut().close();
}
/// Handles a request to exit the script task and shut down layout.
@@ -771,7 +771,7 @@ impl ScriptTask {
page.clone(),
self.chan.clone(),
self.control_chan.clone(),
- self.compositor.dup(),
+ self.compositor.borrow_mut().dup(),
self.image_cache_task.clone()).root();
let doc_url = if is_javascript {
let doc_url = last_url.unwrap_or_else(|| {
@@ -787,7 +787,7 @@ impl ScriptTask {
window.init_browser_context(*document);
- self.compositor.set_ready_state(pipeline_id, Loading);
+ self.compositor.borrow_mut().set_ready_state(pipeline_id, Loading);
let parser_input = if !is_javascript {
InputUrl(url.clone())
@@ -858,7 +858,7 @@ impl ScriptTask {
// Really what needs to happen is that this needs to go through layout to ask which
// layer the element belongs to, and have it send the scroll message to the
// compositor.
- self.compositor.scroll_fragment_point(pipeline_id, LayerId::null(), point);
+ self.compositor.borrow_mut().scroll_fragment_point(pipeline_id, LayerId::null(), point);
}
fn force_reflow(&self, page: &Page) {
@@ -873,7 +873,10 @@ impl ScriptTask {
}
page.damage();
- page.reflow(ReflowForDisplay, self.control_chan.clone(), &*self.compositor, NoQuery);
+ page.reflow(ReflowForDisplay,
+ self.control_chan.clone(),
+ &mut **self.compositor.borrow_mut(),
+ NoQuery);
}
/// This is the main entry point for receiving and dispatching DOM events.