diff options
author | Gregory Terzian <gterzian@users.noreply.github.com> | 2018-07-12 23:13:50 +0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2018-07-13 13:56:46 +0800 |
commit | baef63becd80d2f23f4c7f173b6a400bc5a3d52d (patch) | |
tree | 56bf526e28567d1c8a0cd9ae4ecb6af451da4f29 /components/script/dom | |
parent | f66c9b6160cfe4499fc8018e13b95c44d3e36c8a (diff) | |
download | servo-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.rs | 11 | ||||
-rw-r--r-- | components/script/dom/globalscope.rs | 15 | ||||
-rw-r--r-- | components/script/dom/window.rs | 9 | ||||
-rw-r--r-- | components/script/dom/workerglobalscope.rs | 5 |
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 { |