aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/task_source/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/task_source/mod.rs')
-rw-r--r--components/script/task_source/mod.rs27
1 files changed, 26 insertions, 1 deletions
diff --git a/components/script/task_source/mod.rs b/components/script/task_source/mod.rs
index 4818ba2c80c..cf605976b46 100644
--- a/components/script/task_source/mod.rs
+++ b/components/script/task_source/mod.rs
@@ -2,6 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
pub mod dom_manipulation;
pub mod file_reading;
pub mod history_traversal;
@@ -10,10 +11,33 @@ pub mod performance_timeline;
pub mod user_interaction;
use dom::globalscope::GlobalScope;
+use enum_iterator::IntoEnumIterator;
use std::result::Result;
use task::{TaskCanceller, TaskOnce};
+// The names of all task sources, used to differentiate TaskCancellers.
+// Note: When adding a task source, update this enum.
+// Note: The HistoryTraversalTaskSource is not part of this,
+// because it doesn't implement TaskSource.
+#[derive(Eq, Hash, IntoEnumIterator, JSTraceable, PartialEq)]
+pub enum TaskSourceName {
+ DOMManipulation,
+ FileReading,
+ HistoryTraversal,
+ Networking,
+ PerformanceTimeline,
+ UserInteraction
+}
+
+impl TaskSourceName {
+ pub fn all() -> Vec<TaskSourceName> {
+ TaskSourceName::into_enum_iter().collect()
+ }
+}
+
pub trait TaskSource {
+ const NAME: TaskSourceName;
+
fn queue_with_canceller<T>(
&self,
task: T,
@@ -26,6 +50,7 @@ pub trait TaskSource {
where
T: TaskOnce + 'static,
{
- self.queue_with_canceller(task, &global.task_canceller())
+ let canceller = global.task_canceller(Self::NAME);
+ self.queue_with_canceller(task, &canceller)
}
}