diff options
author | Kunal Mohan <kunalmohan99@gmail.com> | 2019-12-22 21:00:10 +0530 |
---|---|---|
committer | Kunal Mohan <kunalmohan99@gmail.com> | 2019-12-23 01:06:58 +0530 |
commit | 9b59b9602cdf41a77b8cf111b680c034638a06c0 (patch) | |
tree | 4fc75eed115f8cd9916e3452655fe0dfc47f1d9b /components/script/dom/videotrack.rs | |
parent | 43a5f65940f85a30ba3f7fb9cbb96b194cde81b6 (diff) | |
download | servo-9b59b9602cdf41a77b8cf111b680c034638a06c0.tar.gz servo-9b59b9602cdf41a77b8cf111b680c034638a06c0.zip |
Add `track_list` member to AudioTrack, VideoTrack, TextTrack structs
Add member to the track structs pointing at their associated tracklist
and update it when the track is added or removed from a tracklist.
Diffstat (limited to 'components/script/dom/videotrack.rs')
-rw-r--r-- | components/script/dom/videotrack.rs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/components/script/dom/videotrack.rs b/components/script/dom/videotrack.rs index b1453da0df4..18a383ab816 100644 --- a/components/script/dom/videotrack.rs +++ b/components/script/dom/videotrack.rs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +use crate::dom::bindings::cell::DomRefCell; use crate::dom::bindings::codegen::Bindings::VideoTrackBinding::{self, VideoTrackMethods}; use crate::dom::bindings::reflector::{reflect_dom_object, Reflector}; use crate::dom::bindings::root::{Dom, DomRoot}; @@ -19,7 +20,7 @@ pub struct VideoTrack { label: DOMString, language: DOMString, selected: Cell<bool>, - track_list: Option<Dom<VideoTrackList>>, + track_list: DomRefCell<Option<Dom<VideoTrackList>>>, } impl VideoTrack { @@ -37,7 +38,7 @@ impl VideoTrack { label: label.into(), language: language.into(), selected: Cell::new(false), - track_list: track_list.map(|t| Dom::from_ref(t)), + track_list: DomRefCell::new(track_list.map(|t| Dom::from_ref(t))), } } @@ -73,6 +74,14 @@ impl VideoTrack { pub fn set_selected(&self, value: bool) { self.selected.set(value); } + + pub fn add_track_list(&self, track_list: &VideoTrackList) { + *self.track_list.borrow_mut() = Some(Dom::from_ref(track_list)); + } + + pub fn remove_track_list(&self) { + *self.track_list.borrow_mut() = None; + } } impl VideoTrackMethods for VideoTrack { @@ -103,7 +112,7 @@ impl VideoTrackMethods for VideoTrack { // https://html.spec.whatwg.org/multipage/#dom-videotrack-selected fn SetSelected(&self, value: bool) { - if let Some(list) = self.track_list.as_ref() { + if let Some(list) = self.track_list.borrow().as_ref() { if let Some(idx) = list.find(self) { list.set_selected(idx, value); } |