diff options
author | CYBAI <cyb.ai.815@gmail.com> | 2018-06-10 21:02:11 +0800 |
---|---|---|
committer | CYBAI <cyb.ai.815@gmail.com> | 2018-10-18 19:13:23 +0800 |
commit | 42903412c768f289558554419add125ce908e342 (patch) | |
tree | 5778ea48efc1659006fbacb4dd6ed270b91cd8fb /components/script/task_source | |
parent | 924a78c6c678e9448df9983bb370ff40910465bd (diff) | |
download | servo-42903412c768f289558554419add125ce908e342.tar.gz servo-42903412c768f289558554419add125ce908e342.zip |
Make first argument of DOMManipulationTaskSource as a Box<ScriptChan +
Send>
We don't have `window` for `workers`. So, if we use `global.as_window()`
to get the DOMManipulationTaskSource, it will make worker panic.
Instead, we should get the DOMManipulationTaskSource from each own
thread.
Ref: https://github.com/servo/servo/pull/20755#discussion_r193557746
Diffstat (limited to 'components/script/task_source')
-rw-r--r-- | components/script/task_source/dom_manipulation.rs | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/components/script/task_source/dom_manipulation.rs b/components/script/task_source/dom_manipulation.rs index ad01f514e95..376927da742 100644 --- a/components/script/task_source/dom_manipulation.rs +++ b/components/script/task_source/dom_manipulation.rs @@ -8,17 +8,21 @@ use dom::event::{EventBubbles, EventCancelable, EventTask, SimpleEventTask}; use dom::eventtarget::EventTarget; use dom::window::Window; use msg::constellation_msg::PipelineId; -use script_runtime::{CommonScriptMsg, ScriptThreadEventCategory}; -use script_thread::MainThreadScriptMsg; +use script_runtime::{CommonScriptMsg, ScriptChan, ScriptThreadEventCategory}; use servo_atoms::Atom; -use servo_channel::Sender; use std::fmt; use std::result::Result; use task::{TaskCanceller, TaskOnce}; use task_source::{TaskSource, TaskSourceName}; -#[derive(Clone, JSTraceable)] -pub struct DOMManipulationTaskSource(pub Sender<MainThreadScriptMsg>, pub PipelineId); +#[derive(JSTraceable)] +pub struct DOMManipulationTaskSource(pub Box<ScriptChan + Send>, pub PipelineId); + +impl Clone for DOMManipulationTaskSource { + fn clone(&self) -> DOMManipulationTaskSource { + DOMManipulationTaskSource(self.0.clone(), self.1.clone()) + } +} impl fmt::Debug for DOMManipulationTaskSource { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { @@ -33,13 +37,14 @@ impl TaskSource for DOMManipulationTaskSource { where T: TaskOnce + 'static, { - let msg = MainThreadScriptMsg::Common(CommonScriptMsg::Task( + let msg_task = CommonScriptMsg::Task( ScriptThreadEventCategory::ScriptEvent, Box::new(canceller.wrap_task(task)), Some(self.1), DOMManipulationTaskSource::NAME, - )); - self.0.send(msg).map_err(|_| ()) + ); + + self.0.send(msg_task).map_err(|_| ()) } } |