aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/htmlmediaelement.rs
diff options
context:
space:
mode:
authorFernando Jimenez Moreno <ferjmoreno@gmail.com>2018-09-07 18:47:33 +0200
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-10-08 16:12:02 +0200
commit468c59a217598f7da323c1c3c3479c4e3a59d2d4 (patch)
tree2f2ab964f4a3017697b5887591f4cb79306db3e3 /components/script/dom/htmlmediaelement.rs
parentc1bd551b111ac300f6edac91e6bf6cf3658661af (diff)
downloadservo-468c59a217598f7da323c1c3c3479c4e3a59d2d4.tar.gz
servo-468c59a217598f7da323c1c3c3479c4e3a59d2d4.zip
Abort in-progress fetching process during load algorithm
Diffstat (limited to 'components/script/dom/htmlmediaelement.rs')
-rw-r--r--components/script/dom/htmlmediaelement.rs15
1 files changed, 10 insertions, 5 deletions
diff --git a/components/script/dom/htmlmediaelement.rs b/components/script/dom/htmlmediaelement.rs
index db4c1c43d82..51d9d44b597 100644
--- a/components/script/dom/htmlmediaelement.rs
+++ b/components/script/dom/htmlmediaelement.rs
@@ -30,12 +30,14 @@ use dom::node::{document_from_node, window_from_node, Node, NodeDamage, UnbindCo
use dom::promise::Promise;
use dom::virtualmethods::VirtualMethods;
use dom_struct::dom_struct;
+use fetch::FetchCanceller;
use html5ever::{LocalName, Prefix};
use ipc_channel::ipc;
use ipc_channel::router::ROUTER;
use microtask::{Microtask, MicrotaskRunnable};
use mime::{Mime, SubLevel, TopLevel};
-use net_traits::{FetchResponseListener, FetchMetadata, Metadata, NetworkError};
+use net_traits::{CoreResourceMsg, FetchChannels, FetchResponseListener, FetchMetadata, Metadata};
+use net_traits::NetworkError;
use net_traits::request::{CredentialsMode, Destination, RequestInit};
use network_listener::{NetworkListener, PreInvoke};
use script_layout_interface::HTMLMediaData;
@@ -159,6 +161,7 @@ pub struct HTMLMediaElement {
player: Box<Player>,
#[ignore_malloc_size_of = "Arc"]
frame_renderer: Arc<Mutex<MediaFrameRenderer>>,
+ fetch_canceller: DomRefCell<FetchCanceller>,
}
/// <https://html.spec.whatwg.org/multipage/#dom-media-networkstate>
@@ -203,6 +206,7 @@ impl HTMLMediaElement {
player: ServoMedia::get().unwrap().create_player().unwrap(),
frame_renderer:
Arc::new(Mutex::new(MediaFrameRenderer::new(document.window().get_webrender_api_sender()))),
+ fetch_canceller: DomRefCell::new(Default::default()),
}
}
@@ -689,9 +693,10 @@ impl HTMLMediaElement {
listener.notify_fetch(message.to().unwrap());
}),
);
- document
- .loader_mut()
- .fetch_async_background(request, action_sender);
+ let cancel_receiver = self.fetch_canceller.borrow_mut().initialize();
+ let global = self.global();
+ global.core_resource_thread().send(
+ CoreResourceMsg::Fetch(request, FetchChannels::ResponseMsg(action_sender, Some(cancel_receiver)))).unwrap();
},
Resource::Object => {
// FIXME(nox): Actually do something with the object.
@@ -779,7 +784,7 @@ impl HTMLMediaElement {
task_source.queue_simple_event(self.upcast(), atom!("emptied"), &window);
// Step 6.2.
- // FIXME(nox): Abort in-progress fetching process.
+ self.fetch_canceller.borrow_mut().cancel();
// Step 6.3.
// FIXME(nox): Detach MediaSource media provider object.