aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source
diff options
context:
space:
mode:
authorCYBAI <cyb.ai.815@gmail.com>2018-06-10 21:02:11 +0800
committerCYBAI <cyb.ai.815@gmail.com>2018-10-18 19:13:23 +0800
commit42903412c768f289558554419add125ce908e342 (patch)
tree5778ea48efc1659006fbacb4dd6ed270b91cd8fb /components/script/task_source
parent924a78c6c678e9448df9983bb370ff40910465bd (diff)
downloadservo-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.rs21
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(|_| ())
}
}