diff options
author | Fernando Jimenez Moreno <ferjmoreno@gmail.com> | 2018-09-07 18:47:33 +0200 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-10-08 16:12:02 +0200 |
commit | 468c59a217598f7da323c1c3c3479c4e3a59d2d4 (patch) | |
tree | 2f2ab964f4a3017697b5887591f4cb79306db3e3 /components/script/dom/htmlmediaelement.rs | |
parent | c1bd551b111ac300f6edac91e6bf6cf3658661af (diff) | |
download | servo-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.rs | 15 |
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. |