mirror of
https://github.com/servo/servo.git
synced 2025-07-24 07:40:27 +01:00
Use task! to reestablish the event source connection
This commit is contained in:
parent
1fa0e21e4b
commit
445a93eb8b
1 changed files with 37 additions and 35 deletions
|
@ -121,12 +121,43 @@ impl EventSourceContext {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Step 1
|
let trusted_event_source = self.event_source.clone();
|
||||||
let task = box ReestablishConnectionTask {
|
let action_sender = self.action_sender.clone();
|
||||||
event_source: self.event_source.clone(),
|
let global = event_source.global();
|
||||||
action_sender: self.action_sender.clone()
|
// FIXME(nox): Why are errors silenced here?
|
||||||
};
|
let _ = global.networking_task_source().queue(
|
||||||
let _ = event_source.global().networking_task_source().queue(task, &*event_source.global());
|
box task!(reestablish_the_event_source_onnection: move || {
|
||||||
|
let event_source = trusted_event_source.root();
|
||||||
|
|
||||||
|
// Step 1.1.
|
||||||
|
if event_source.ready_state.get() == ReadyState::Closed {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 1.2.
|
||||||
|
event_source.ready_state.set(ReadyState::Connecting);
|
||||||
|
|
||||||
|
// Step 1.3.
|
||||||
|
event_source.upcast::<EventTarget>().fire_event(atom!("error"));
|
||||||
|
|
||||||
|
// Step 2.
|
||||||
|
let duration = Length::new(event_source.reconnection_time.get());
|
||||||
|
|
||||||
|
// Step 3.
|
||||||
|
// TODO: Optionally wait some more.
|
||||||
|
|
||||||
|
// Steps 4-5.
|
||||||
|
let callback = OneshotTimerCallback::EventSourceTimeout(
|
||||||
|
EventSourceTimeoutCallback {
|
||||||
|
event_source: trusted_event_source,
|
||||||
|
action_sender,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
// FIXME(nox): Why are errors silenced here?
|
||||||
|
let _ = event_source.global().schedule_callback(callback, duration);
|
||||||
|
}),
|
||||||
|
&global,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/#processField
|
// https://html.spec.whatwg.org/multipage/#processField
|
||||||
|
@ -499,35 +530,6 @@ impl Task for FailConnectionTask {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct ReestablishConnectionTask {
|
|
||||||
event_source: Trusted<EventSource>,
|
|
||||||
action_sender: ipc::IpcSender<FetchResponseMsg>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Task for ReestablishConnectionTask {
|
|
||||||
// https://html.spec.whatwg.org/multipage/#reestablish-the-connection
|
|
||||||
fn run(self: Box<Self>) {
|
|
||||||
let event_source = self.event_source.root();
|
|
||||||
// Step 1.1
|
|
||||||
if event_source.ready_state.get() == ReadyState::Closed {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// Step 1.2
|
|
||||||
event_source.ready_state.set(ReadyState::Connecting);
|
|
||||||
// Step 1.3
|
|
||||||
event_source.upcast::<EventTarget>().fire_event(atom!("error"));
|
|
||||||
// Step 2
|
|
||||||
let duration = Length::new(event_source.reconnection_time.get());
|
|
||||||
// TODO Step 3: Optionally wait some more
|
|
||||||
// Steps 4-5
|
|
||||||
let callback = OneshotTimerCallback::EventSourceTimeout(EventSourceTimeoutCallback {
|
|
||||||
event_source: self.event_source.clone(),
|
|
||||||
action_sender: self.action_sender.clone()
|
|
||||||
});
|
|
||||||
let _ = event_source.global().schedule_callback(callback, duration);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(HeapSizeOf, JSTraceable)]
|
#[derive(HeapSizeOf, JSTraceable)]
|
||||||
pub struct EventSourceTimeoutCallback {
|
pub struct EventSourceTimeoutCallback {
|
||||||
#[ignore_heap_size_of = "Because it is non-owning"]
|
#[ignore_heap_size_of = "Because it is non-owning"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue