aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorGregory Terzian <gterzian@users.noreply.github.com>2018-07-12 23:13:50 +0800
committerGregory Terzian <gterzian@users.noreply.github.com>2018-07-13 13:56:46 +0800
commitbaef63becd80d2f23f4c7f173b6a400bc5a3d52d (patch)
tree56bf526e28567d1c8a0cd9ae4ecb6af451da4f29 /components/script/dom
parentf66c9b6160cfe4499fc8018e13b95c44d3e36c8a (diff)
downloadservo-baef63becd80d2f23f4c7f173b6a400bc5a3d52d.tar.gz
servo-baef63becd80d2f23f4c7f173b6a400bc5a3d52d.zip
use remote-event task source in EventSource
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/eventsource.rs11
-rw-r--r--components/script/dom/globalscope.rs15
-rw-r--r--components/script/dom/window.rs9
-rw-r--r--components/script/dom/workerglobalscope.rs5
4 files changed, 33 insertions, 7 deletions
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index f0b5726e6a3..48b762978ca 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -100,7 +100,7 @@ impl EventSourceContext {
let global = event_source.global();
let event_source = self.event_source.clone();
// FIXME(nox): Why are errors silenced here?
- let _ = global.networking_task_source().queue(
+ let _ = global.remote_event_task_source().queue(
task!(announce_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -121,7 +121,7 @@ impl EventSourceContext {
let global = event_source.global();
let event_source = self.event_source.clone();
// FIXME(nox): Why are errors silenced here?
- let _ = global.networking_task_source().queue(
+ let _ = global.remote_event_task_source().queue(
task!(fail_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -145,7 +145,7 @@ impl EventSourceContext {
let action_sender = self.action_sender.clone();
let global = event_source.global();
// FIXME(nox): Why are errors silenced here?
- let _ = global.networking_task_source().queue(
+ let _ = global.remote_event_task_source().queue(
task!(reestablish_the_event_source_onnection: move || {
let event_source = trusted_event_source.root();
@@ -242,7 +242,7 @@ impl EventSourceContext {
let event_source = self.event_source.clone();
let event = Trusted::new(&*event);
// FIXME(nox): Why are errors silenced here?
- let _ = global.networking_task_source().queue(
+ let _ = global.remote_event_task_source().queue(
task!(dispatch_the_event_source_event: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
@@ -423,6 +423,7 @@ impl EventSource {
self.request.borrow().clone().unwrap()
}
+ // https://html.spec.whatwg.org/multipage/#dom-eventsource
pub fn Constructor(global: &GlobalScope,
url: DOMString,
event_source_init: &EventSourceInit) -> Fallible<DomRoot<EventSource>> {
@@ -482,8 +483,6 @@ impl EventSource {
data: String::new(),
last_event_id: String::new(),
};
- // TODO: use the "remote event task source", and canceller.
- // https://html.spec.whatwg.org/multipage/#remote-event-task-source
let listener = NetworkListener {
context: Arc::new(Mutex::new(context)),
task_source: global.networking_task_source(),
diff --git a/components/script/dom/globalscope.rs b/components/script/dom/globalscope.rs
index 759216df27a..08e7b2d3d62 100644
--- a/components/script/dom/globalscope.rs
+++ b/components/script/dom/globalscope.rs
@@ -56,6 +56,7 @@ use task_source::TaskSourceName;
use task_source::file_reading::FileReadingTaskSource;
use task_source::networking::NetworkingTaskSource;
use task_source::performance_timeline::PerformanceTimelineTaskSource;
+use task_source::remote_event::RemoteEventTaskSource;
use time::{Timespec, get_time};
use timers::{IsInterval, OneshotTimerCallback, OneshotTimerHandle};
use timers::{OneshotTimers, TimerCallback};
@@ -390,7 +391,7 @@ impl GlobalScope {
}
/// `ScriptChan` to send messages to the networking task source of
- /// this of this global scope.
+ /// this global scope.
pub fn networking_task_source(&self) -> NetworkingTaskSource {
if let Some(window) = self.downcast::<Window>() {
return window.networking_task_source();
@@ -401,6 +402,18 @@ impl GlobalScope {
unreachable!();
}
+ /// `ScriptChan` to send messages to the remote-event task source of
+ /// this global scope.
+ pub fn remote_event_task_source(&self) -> RemoteEventTaskSource {
+ if let Some(window) = self.downcast::<Window>() {
+ return window.remote_event_task_source();
+ }
+ if let Some(worker) = self.downcast::<WorkerGlobalScope>() {
+ return worker.remote_event_task_source();
+ }
+ unreachable!();
+ }
+
/// Evaluate JS code on this global scope.
pub fn evaluate_js_on_global_with_result(
&self, code: &str, rval: MutableHandleValue) -> bool {
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index d0d6e499639..ea3a92e0f37 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -115,6 +115,7 @@ use task_source::file_reading::FileReadingTaskSource;
use task_source::history_traversal::HistoryTraversalTaskSource;
use task_source::networking::NetworkingTaskSource;
use task_source::performance_timeline::PerformanceTimelineTaskSource;
+use task_source::remote_event::RemoteEventTaskSource;
use task_source::user_interaction::UserInteractionTaskSource;
use time;
use timers::{IsInterval, TimerCallback};
@@ -172,6 +173,8 @@ pub struct Window {
file_reading_task_source: FileReadingTaskSource,
#[ignore_malloc_size_of = "task sources are hard"]
performance_timeline_task_source: PerformanceTimelineTaskSource,
+ #[ignore_malloc_size_of = "task sources are hard"]
+ remote_event_task_source: RemoteEventTaskSource,
navigator: MutNullableDom<Navigator>,
#[ignore_malloc_size_of = "Arc"]
image_cache: Arc<ImageCache>,
@@ -358,6 +361,10 @@ impl Window {
self.performance_timeline_task_source.clone()
}
+ pub fn remote_event_task_source(&self) -> RemoteEventTaskSource {
+ self.remote_event_task_source.clone()
+ }
+
pub fn main_thread_script_chan(&self) -> &Sender<MainThreadScriptMsg> {
&self.script_chan.0
}
@@ -1798,6 +1805,7 @@ impl Window {
history_traversal_task_source: HistoryTraversalTaskSource,
file_reading_task_source: FileReadingTaskSource,
performance_timeline_task_source: PerformanceTimelineTaskSource,
+ remote_event_task_source: RemoteEventTaskSource,
image_cache_chan: Sender<ImageCacheMsg>,
image_cache: Arc<ImageCache>,
resource_threads: ResourceThreads,
@@ -1850,6 +1858,7 @@ impl Window {
history_traversal_task_source,
file_reading_task_source,
performance_timeline_task_source,
+ remote_event_task_source,
image_cache_chan,
image_cache,
navigator: Default::default(),
diff --git a/components/script/dom/workerglobalscope.rs b/components/script/dom/workerglobalscope.rs
index 0f9924253aa..431aaa6b156 100644
--- a/components/script/dom/workerglobalscope.rs
+++ b/components/script/dom/workerglobalscope.rs
@@ -46,6 +46,7 @@ use task::TaskCanceller;
use task_source::file_reading::FileReadingTaskSource;
use task_source::networking::NetworkingTaskSource;
use task_source::performance_timeline::PerformanceTimelineTaskSource;
+use task_source::remote_event::RemoteEventTaskSource;
use time::precise_time_ns;
use timers::{IsInterval, TimerCallback};
@@ -385,6 +386,10 @@ impl WorkerGlobalScope {
PerformanceTimelineTaskSource(self.script_chan(), self.pipeline_id())
}
+ pub fn remote_event_task_source(&self) -> RemoteEventTaskSource {
+ RemoteEventTaskSource(self.script_chan(), self.pipeline_id())
+ }
+
pub fn new_script_pair(&self) -> (Box<ScriptChan + Send>, Box<ScriptPort + Send>) {
let dedicated = self.downcast::<DedicatedWorkerGlobalScope>();
if let Some(dedicated) = dedicated {