aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
authorAnthony Ramine <n.oxyde@gmail.com>2017-09-20 10:37:09 +0200
committerAnthony Ramine <n.oxyde@gmail.com>2017-09-20 10:37:09 +0200
commit6c9fb5ae7a4eb6cff38de3bb6446af304a32bc8a (patch)
tree63a8bd729171e5886340fe89774f2287bd11cb5b /components/script/dom
parent52527d6f9dfaae13458059243d975f5336bdead4 (diff)
downloadservo-6c9fb5ae7a4eb6cff38de3bb6446af304a32bc8a.tar.gz
servo-6c9fb5ae7a4eb6cff38de3bb6446af304a32bc8a.zip
Introduce TaskOnce
Having both TaskBox and TaskOnce allows us to remove the superfluous inner boxing from CancellableTask<T>.
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bindings/refcounted.rs6
-rw-r--r--components/script/dom/bluetooth.rs13
-rw-r--r--components/script/dom/document.rs2
-rw-r--r--components/script/dom/element.rs10
-rw-r--r--components/script/dom/event.rs10
-rw-r--r--components/script/dom/eventsource.rs8
-rw-r--r--components/script/dom/filereader.rs6
-rw-r--r--components/script/dom/htmldetailselement.rs2
-rwxr-xr-xcomponents/script/dom/htmlformelement.rs2
-rw-r--r--components/script/dom/htmliframeelement.rs2
-rw-r--r--components/script/dom/htmlimageelement.rs10
-rw-r--r--components/script/dom/htmlmediaelement.rs6
-rw-r--r--components/script/dom/serviceworker.rs9
-rw-r--r--components/script/dom/storage.rs2
-rw-r--r--components/script/dom/websocket.rs26
-rw-r--r--components/script/dom/window.rs4
-rw-r--r--components/script/dom/worker.rs9
17 files changed, 62 insertions, 65 deletions
diff --git a/components/script/dom/bindings/refcounted.rs b/components/script/dom/bindings/refcounted.rs
index 1f1f9c52722..45d7d721307 100644
--- a/components/script/dom/bindings/refcounted.rs
+++ b/components/script/dom/bindings/refcounted.rs
@@ -40,7 +40,7 @@ use std::marker::PhantomData;
use std::os;
use std::rc::Rc;
use std::sync::{Arc, Weak};
-use task::TaskBox;
+use task::TaskOnce;
#[allow(missing_docs)] // FIXME
@@ -122,7 +122,7 @@ impl TrustedPromise {
/// A task which will reject the promise.
#[allow(unrooted_must_root)]
- pub fn reject_task(self, error: Error) -> impl TaskBox {
+ pub fn reject_task(self, error: Error) -> impl TaskOnce {
let this = self;
task!(reject_promise: move || {
debug!("Rejecting promise.");
@@ -135,7 +135,7 @@ impl TrustedPromise {
/// A task which will resolve the promise.
#[allow(unrooted_must_root)]
- pub fn resolve_task<T>(self, value: T) -> impl TaskBox
+ pub fn resolve_task<T>(self, value: T) -> impl TaskOnce
where
T: ToJSValConvertible + Send,
{
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 27a588a1a63..526ebe576fc 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -40,7 +40,7 @@ use std::collections::HashMap;
use std::rc::Rc;
use std::str::FromStr;
use std::sync::{Arc, Mutex};
-use task::TaskBox;
+use task::TaskOnce;
const KEY_CONVERSION_ERROR: &'static str = "This `manufacturerData` key can not be parsed as unsigned short:";
const FILTER_EMPTY_ERROR: &'static str = "'filters' member, if present, must be nonempty to find any devices.";
@@ -229,18 +229,17 @@ pub fn response_async<T: AsyncBluetoothListener + DomObject + 'static>(
action: BluetoothResponseResult,
}
- impl<T> TaskBox for ListenerTask<T>
+ impl<T> TaskOnce for ListenerTask<T>
where
T: AsyncBluetoothListener + DomObject,
{
- fn run_box(self: Box<Self>) {
- let this = *self;
- let mut context = this.context.lock().unwrap();
- context.response(this.action);
+ fn run_once(self) {
+ let mut context = self.context.lock().unwrap();
+ context.response(self.action);
}
}
- let task = box ListenerTask {
+ let task = ListenerTask {
context: context.clone(),
action: message.to().unwrap(),
};
diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs
index 0d180ca9934..e3bb46bf5c0 100644
--- a/components/script/dom/document.rs
+++ b/components/script/dom/document.rs
@@ -1716,7 +1716,7 @@ impl Document {
debug!("Document loads are complete.");
let document = Trusted::new(self);
self.window.dom_manipulation_task_source().queue(
- box task!(fire_load_event: move || {
+ task!(fire_load_event: move || {
let document = document.root();
let window = document.window();
if !window.is_alive() {
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs
index b96d2bf56aa..195884bebab 100644
--- a/components/script/dom/element.rs
+++ b/components/script/dom/element.rs
@@ -119,7 +119,7 @@ use style::thread_state;
use style::values::{CSSFloat, Either};
use style::values::{specified, computed};
use stylesheet_loader::StylesheetOwner;
-use task::TaskBox;
+use task::TaskOnce;
// TODO: Update focus state when the top-level browsing context gains or loses system focus,
// and when the element enters or leaves a browsing context container.
@@ -3047,9 +3047,9 @@ impl ElementPerformFullscreenEnter {
}
}
-impl TaskBox for ElementPerformFullscreenEnter {
+impl TaskOnce for ElementPerformFullscreenEnter {
#[allow(unrooted_must_root)]
- fn run_box(self: Box<Self>) {
+ fn run_once(self) {
let element = self.element.root();
let document = document_from_node(element.r());
@@ -3100,9 +3100,9 @@ impl ElementPerformFullscreenExit {
}
}
-impl TaskBox for ElementPerformFullscreenExit {
+impl TaskOnce for ElementPerformFullscreenExit {
#[allow(unrooted_must_root)]
- fn run_box(self: Box<Self>) {
+ fn run_once(self) {
let element = self.element.root();
let document = document_from_node(element.r());
// TODO Step 9.1-5
diff --git a/components/script/dom/event.rs b/components/script/dom/event.rs
index 5121768cd51..c9ef22bc6c1 100644
--- a/components/script/dom/event.rs
+++ b/components/script/dom/event.rs
@@ -23,7 +23,7 @@ use dom_struct::dom_struct;
use servo_atoms::Atom;
use std::cell::Cell;
use std::default::Default;
-use task::TaskBox;
+use task::TaskOnce;
use time;
#[dom_struct]
@@ -388,8 +388,8 @@ pub struct EventTask {
pub cancelable: EventCancelable,
}
-impl TaskBox for EventTask {
- fn run_box(self: Box<Self>) {
+impl TaskOnce for EventTask {
+ fn run_once(self) {
let target = self.target.root();
let bubbles = self.bubbles;
let cancelable = self.cancelable;
@@ -403,8 +403,8 @@ pub struct SimpleEventTask {
pub name: Atom,
}
-impl TaskBox for SimpleEventTask {
- fn run_box(self: Box<Self>) {
+impl TaskOnce for SimpleEventTask {
+ fn run_once(self) {
let target = self.target.root();
target.fire_event(self.name);
}
diff --git a/components/script/dom/eventsource.rs b/components/script/dom/eventsource.rs
index bf4c1c78c95..07f5c3b4500 100644
--- a/components/script/dom/eventsource.rs
+++ b/components/script/dom/eventsource.rs
@@ -100,7 +100,7 @@ impl EventSourceContext {
let event_source = self.event_source.clone();
// FIXME(nox): Why are errors silenced here?
let _ = global.networking_task_source().queue(
- box task!(announce_the_event_source_connection: move || {
+ task!(announce_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
event_source.ready_state.set(ReadyState::Open);
@@ -121,7 +121,7 @@ impl EventSourceContext {
let event_source = self.event_source.clone();
// FIXME(nox): Why are errors silenced here?
let _ = global.networking_task_source().queue(
- box task!(fail_the_event_source_connection: move || {
+ task!(fail_the_event_source_connection: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
event_source.ready_state.set(ReadyState::Closed);
@@ -145,7 +145,7 @@ impl EventSourceContext {
let global = event_source.global();
// FIXME(nox): Why are errors silenced here?
let _ = global.networking_task_source().queue(
- box task!(reestablish_the_event_source_onnection: move || {
+ task!(reestablish_the_event_source_onnection: move || {
let event_source = trusted_event_source.root();
// Step 1.1.
@@ -242,7 +242,7 @@ impl EventSourceContext {
let event = Trusted::new(&*event);
// FIXME(nox): Why are errors silenced here?
let _ = global.networking_task_source().queue(
- box task!(dispatch_the_event_source_event: move || {
+ task!(dispatch_the_event_source_event: move || {
let event_source = event_source.root();
if event_source.ready_state.get() != ReadyState::Closed {
event.root().upcast::<Event>().fire(&event_source.upcast());
diff --git a/components/script/dom/filereader.rs b/components/script/dom/filereader.rs
index b2f5b1ca36f..3ee3c146b75 100644
--- a/components/script/dom/filereader.rs
+++ b/components/script/dom/filereader.rs
@@ -416,11 +416,11 @@ fn perform_annotated_read_operation(
) {
// Step 4
let task = FileReadingTask::ProcessRead(filereader.clone(), gen_id);
- task_source.queue_with_canceller(box task, &canceller).unwrap();
+ task_source.queue_with_canceller(task, &canceller).unwrap();
let task = FileReadingTask::ProcessReadData(filereader.clone(), gen_id);
- task_source.queue_with_canceller(box task, &canceller).unwrap();
+ task_source.queue_with_canceller(task, &canceller).unwrap();
let task = FileReadingTask::ProcessReadEOF(filereader, gen_id, data, blob_contents);
- task_source.queue_with_canceller(box task, &canceller).unwrap();
+ task_source.queue_with_canceller(task, &canceller).unwrap();
}
diff --git a/components/script/dom/htmldetailselement.rs b/components/script/dom/htmldetailselement.rs
index 59090f80f48..72952da8310 100644
--- a/components/script/dom/htmldetailselement.rs
+++ b/components/script/dom/htmldetailselement.rs
@@ -70,7 +70,7 @@ impl VirtualMethods for HTMLDetailsElement {
let this = Trusted::new(self);
// FIXME(nox): Why are errors silenced here?
let _ = window.dom_manipulation_task_source().queue(
- box task!(details_notification_task_steps: move || {
+ task!(details_notification_task_steps: move || {
let this = this.root();
if counter == this.toggle_counter.get() {
this.upcast::<EventTarget>().fire_event(atom!("toggle"));
diff --git a/components/script/dom/htmlformelement.rs b/components/script/dom/htmlformelement.rs
index 81b9cdb44a1..f396bc51715 100755
--- a/components/script/dom/htmlformelement.rs
+++ b/components/script/dom/htmlformelement.rs
@@ -440,7 +440,7 @@ impl HTMLFormElement {
let pipeline_id = window.upcast::<GlobalScope>().pipeline_id();
let script_chan = window.main_thread_script_chan().clone();
let this = Trusted::new(self);
- let task = box task!(navigate_to_form_planned_navigation: move || {
+ let task = task!(navigate_to_form_planned_navigation: move || {
if generation_id != this.root().generation_id.get() {
return;
}
diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs
index 81a0f8417a7..7f0b82fa239 100644
--- a/components/script/dom/htmliframeelement.rs
+++ b/components/script/dom/htmliframeelement.rs
@@ -236,7 +236,7 @@ impl HTMLIFrameElement {
let pipeline_id = self.pipeline_id().unwrap();
// FIXME(nox): Why are errors silenced here?
let _ = window.dom_manipulation_task_source().queue(
- box task!(iframe_load_event_steps: move || {
+ task!(iframe_load_event_steps: move || {
this.root().iframe_load_event_steps(pipeline_id);
}),
window.upcast(),
diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs
index 30ef64da97e..49db07a3242 100644
--- a/components/script/dom/htmlimageelement.rs
+++ b/components/script/dom/htmlimageelement.rs
@@ -174,7 +174,7 @@ impl HTMLImageElement {
let image = message.to().unwrap();
// FIXME(nox): Why are errors silenced here?
let _ = task_source.queue_with_canceller(
- box task!(process_image_response: move || {
+ task!(process_image_response: move || {
let element = element.root();
// Ignore any image response for a previous request that has been discarded.
if generation == element.generation.get() {
@@ -425,7 +425,7 @@ impl HTMLImageElement {
// Step 9.
// FIXME(nox): Why are errors silenced here?
let _ = task_source.queue(
- box task!(image_null_source_error: move || {
+ task!(image_null_source_error: move || {
let this = this.root();
{
let mut current_request =
@@ -451,7 +451,7 @@ impl HTMLImageElement {
let target = Trusted::new(self.upcast::<EventTarget>());
// FIXME(nox): Why are errors silenced here?
let _ = task_source.queue(
- box task!(fire_progress_event: move || {
+ task!(fire_progress_event: move || {
let target = target.root();
let event = ProgressEvent::new(
@@ -480,7 +480,7 @@ impl HTMLImageElement {
let src = String::from(src);
// FIXME(nox): Why are errors silenced here?
let _ = task_source.queue(
- box task!(image_selected_source_error: move || {
+ task!(image_selected_source_error: move || {
let this = this.root();
{
let mut current_request =
@@ -549,7 +549,7 @@ impl HTMLImageElement {
let this = Trusted::new(self);
let src = String::from(src);
let _ = window.dom_manipulation_task_source().queue(
- box task!(image_load_event: move || {
+ task!(image_load_event: move || {
let this = this.root();
{
let mut current_request =
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index 594c0ea221e..3700a64364e 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -154,7 +154,7 @@ impl HTMLMediaElement {
let target = Trusted::new(self.upcast::<EventTarget>());
// FIXME(nox): Why are errors silenced here?
let _ = window.dom_manipulation_task_source().queue(
- box task!(internal_pause_steps: move || {
+ task!(internal_pause_steps: move || {
let target = target.root();
// Step 2.3.1.
@@ -186,7 +186,7 @@ impl HTMLMediaElement {
let window = window_from_node(self);
// FIXME(nox): Why are errors silenced here?
let _ = window.dom_manipulation_task_source().queue(
- box task!(notify_about_playing: move || {
+ task!(notify_about_playing: move || {
let target = target.root();
// Step 2.1.
@@ -495,7 +495,7 @@ impl HTMLMediaElement {
let window = window_from_node(self);
// FIXME(nox): Why are errors silenced here?
let _ = window.dom_manipulation_task_source().queue(
- box task!(dedicated_media_source_failure_steps: move || {
+ task!(dedicated_media_source_failure_steps: move || {
let this = this.root();
// Step 1.
diff --git a/components/script/dom/serviceworker.rs b/components/script/dom/serviceworker.rs
index 9a4d85caa69..51c75309050 100644
--- a/components/script/dom/serviceworker.rs
+++ b/components/script/dom/serviceworker.rs
@@ -19,7 +19,7 @@ use js::jsapi::{HandleValue, JSContext};
use script_traits::{ScriptMsg, DOMMessage};
use servo_url::ServoUrl;
use std::cell::Cell;
-use task::TaskBox;
+use task::TaskOnce;
pub type TrustedServiceWorkerAddress = Trusted<ServiceWorker>;
@@ -104,10 +104,9 @@ impl ServiceWorkerMethods for ServiceWorker {
event_handler!(statechange, GetOnstatechange, SetOnstatechange);
}
-impl TaskBox for SimpleWorkerErrorHandler<ServiceWorker> {
+impl TaskOnce for SimpleWorkerErrorHandler<ServiceWorker> {
#[allow(unrooted_must_root)]
- fn run_box(self: Box<Self>) {
- let this = *self;
- ServiceWorker::dispatch_simple_error(this.addr);
+ fn run_once(self) {
+ ServiceWorker::dispatch_simple_error(self.addr);
}
}
diff --git a/components/script/dom/storage.rs b/components/script/dom/storage.rs
index 3dbada1b334..e7b948e46d6 100644
--- a/components/script/dom/storage.rs
+++ b/components/script/dom/storage.rs
@@ -167,7 +167,7 @@ impl Storage {
let global = self.global();
let this = Trusted::new(self);
global.as_window().dom_manipulation_task_source().queue(
- box task!(send_storage_notification: move || {
+ task!(send_storage_notification: move || {
let this = this.root();
let global = this.global();
let event = StorageEvent::new(
diff --git a/components/script/dom/websocket.rs b/components/script/dom/websocket.rs
index bb48cec942e..3d482bb4fa5 100644
--- a/components/script/dom/websocket.rs
+++ b/components/script/dom/websocket.rs
@@ -37,7 +37,7 @@ use std::borrow::ToOwned;
use std::cell::Cell;
use std::ptr;
use std::thread;
-use task::{TaskBox, TaskCanceller};
+use task::{TaskOnce, TaskCanceller};
use task_source::TaskSource;
use task_source::networking::NetworkingTaskSource;
@@ -74,7 +74,7 @@ pub fn close_the_websocket_connection(
code: Option<u16>,
reason: String,
) {
- let close_task = box CloseTask {
+ let close_task = CloseTask {
address: address,
failed: false,
code: code,
@@ -88,7 +88,7 @@ pub fn fail_the_websocket_connection(
task_source: &NetworkingTaskSource,
canceller: &TaskCanceller,
) {
- let close_task = box CloseTask {
+ let close_task = CloseTask {
address: address,
failed: true,
code: Some(close_code::ABNORMAL),
@@ -206,14 +206,14 @@ impl WebSocket {
while let Ok(event) = dom_event_receiver.recv() {
match event {
WebSocketNetworkEvent::ConnectionEstablished { protocol_in_use } => {
- let open_thread = box ConnectionEstablishedTask {
+ let open_thread = ConnectionEstablishedTask {
address: address.clone(),
protocol_in_use,
};
task_source.queue_with_canceller(open_thread, &canceller).unwrap();
},
WebSocketNetworkEvent::MessageReceived(message) => {
- let message_thread = box MessageReceivedTask {
+ let message_thread = MessageReceivedTask {
address: address.clone(),
message: message,
};
@@ -397,9 +397,9 @@ struct ConnectionEstablishedTask {
protocol_in_use: Option<String>,
}
-impl TaskBox for ConnectionEstablishedTask {
+impl TaskOnce for ConnectionEstablishedTask {
/// https://html.spec.whatwg.org/multipage/#feedback-from-the-protocol:concept-websocket-established
- fn run_box(self: Box<Self>) {
+ fn run_once(self) {
let ws = self.address.root();
// Step 1.
@@ -422,13 +422,13 @@ struct BufferedAmountTask {
address: Trusted<WebSocket>,
}
-impl TaskBox for BufferedAmountTask {
+impl TaskOnce for BufferedAmountTask {
// See https://html.spec.whatwg.org/multipage/#dom-websocket-bufferedamount
//
// To be compliant with standards, we need to reset bufferedAmount only when the event loop
// reaches step 1. In our implementation, the bytes will already have been sent on a background
// thread.
- fn run_box(self: Box<Self>) {
+ fn run_once(self) {
let ws = self.address.root();
ws.buffered_amount.set(0);
@@ -443,8 +443,8 @@ struct CloseTask {
reason: Option<String>,
}
-impl TaskBox for CloseTask {
- fn run_box(self: Box<Self>) {
+impl TaskOnce for CloseTask {
+ fn run_once(self) {
let ws = self.address.root();
if ws.ready_state.get() == WebSocketRequestState::Closed {
@@ -483,9 +483,9 @@ struct MessageReceivedTask {
message: MessageData,
}
-impl TaskBox for MessageReceivedTask {
+impl TaskOnce for MessageReceivedTask {
#[allow(unsafe_code)]
- fn run_box(self: Box<Self>) {
+ fn run_once(self) {
let ws = self.address.root();
debug!("MessageReceivedTask::handler({:p}): readyState={:?}", &*ws,
ws.ready_state.get());
diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs
index c4a22c70757..1cb38d0a7ca 100644
--- a/components/script/dom/window.rs
+++ b/components/script/dom/window.rs
@@ -1977,7 +1977,7 @@ impl Window {
serialize_with_transfer_result: StructuredCloneData,
) {
let this = Trusted::new(self);
- let task = box task!(post_serialised_message: move || {
+ let task = task!(post_serialised_message: move || {
let this = this.root();
// Step 7.1.
@@ -2012,7 +2012,7 @@ impl Window {
// TODO(#12718): Use the "posted message task source".
let _ = self.script_chan.send(CommonScriptMsg::Task(
ScriptThreadEventCategory::DomEvent,
- self.task_canceller().wrap_task(task),
+ box self.task_canceller().wrap_task(task),
));
}
}
diff --git a/components/script/dom/worker.rs b/components/script/dom/worker.rs
index cf62e46e456..7d9a3875f1b 100644
--- a/components/script/dom/worker.rs
+++ b/components/script/dom/worker.rs
@@ -28,7 +28,7 @@ use std::cell::Cell;
use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicBool, Ordering};
use std::sync::mpsc::{Sender, channel};
-use task::TaskBox;
+use task::TaskOnce;
pub type TrustedWorkerAddress = Trusted<Worker>;
@@ -175,10 +175,9 @@ impl WorkerMethods for Worker {
event_handler!(error, GetOnerror, SetOnerror);
}
-impl TaskBox for SimpleWorkerErrorHandler<Worker> {
+impl TaskOnce for SimpleWorkerErrorHandler<Worker> {
#[allow(unrooted_must_root)]
- fn run_box(self: Box<Self>) {
- let this = *self;
- Worker::dispatch_simple_error(this.addr);
+ fn run_once(self) {
+ Worker::dispatch_simple_error(self.addr);
}
}