script/dom/media/
mediametadata.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use js::rust::HandleObject;
8use script_bindings::cell::DomRefCell;
9use script_bindings::reflector::{Reflector, reflect_dom_object_with_proto};
10
11use crate::dom::bindings::codegen::Bindings::MediaMetadataBinding::{
12 MediaMetadataInit, MediaMetadataMethods,
13};
14use crate::dom::bindings::error::Fallible;
15use crate::dom::bindings::root::{DomRoot, MutNullableDom};
16use crate::dom::bindings::str::DOMString;
17use crate::dom::media::mediasession::MediaSession;
18use crate::dom::window::Window;
19use crate::script_runtime::CanGc;
20
21#[dom_struct]
22pub(crate) struct MediaMetadata {
23 reflector_: Reflector,
24 session: MutNullableDom<MediaSession>,
25 title: DomRefCell<DOMString>,
26 artist: DomRefCell<DOMString>,
27 album: DomRefCell<DOMString>,
28}
29
30impl MediaMetadata {
31 fn new_inherited(init: &MediaMetadataInit) -> MediaMetadata {
32 MediaMetadata {
33 reflector_: Reflector::new(),
34 session: Default::default(),
35 title: DomRefCell::new(init.title.clone()),
36 artist: DomRefCell::new(init.artist.clone()),
37 album: DomRefCell::new(init.album.clone()),
38 }
39 }
40
41 pub(crate) fn new(
42 global: &Window,
43 init: &MediaMetadataInit,
44 can_gc: CanGc,
45 ) -> DomRoot<MediaMetadata> {
46 Self::new_with_proto(global, None, init, can_gc)
47 }
48
49 fn new_with_proto(
50 global: &Window,
51 proto: Option<HandleObject>,
52 init: &MediaMetadataInit,
53 can_gc: CanGc,
54 ) -> DomRoot<MediaMetadata> {
55 reflect_dom_object_with_proto(
56 Box::new(MediaMetadata::new_inherited(init)),
57 global,
58 proto,
59 can_gc,
60 )
61 }
62
63 fn queue_update_metadata_algorithm(&self) {
64 if self.session.get().is_none() {}
65 }
66
67 pub(crate) fn set_session(&self, session: &MediaSession) {
68 self.session.set(Some(session));
69 }
70}
71
72impl MediaMetadataMethods<crate::DomTypeHolder> for MediaMetadata {
73 fn Constructor(
75 cx: &mut JSContext,
76 window: &Window,
77 proto: Option<HandleObject>,
78 init: &MediaMetadataInit,
79 ) -> Fallible<DomRoot<MediaMetadata>> {
80 Ok(MediaMetadata::new_with_proto(
81 window,
82 proto,
83 init,
84 CanGc::from_cx(cx),
85 ))
86 }
87
88 fn Title(&self) -> DOMString {
90 self.title.borrow().clone()
91 }
92
93 fn SetTitle(&self, value: DOMString) {
95 *self.title.borrow_mut() = value;
96 self.queue_update_metadata_algorithm();
97 }
98
99 fn Artist(&self) -> DOMString {
101 self.artist.borrow().clone()
102 }
103
104 fn SetArtist(&self, value: DOMString) {
106 *self.artist.borrow_mut() = value;
107 self.queue_update_metadata_algorithm();
108 }
109
110 fn Album(&self) -> DOMString {
112 self.album.borrow().clone()
113 }
114
115 fn SetAlbum(&self, value: DOMString) {
117 *self.album.borrow_mut() = value;
118 self.queue_update_metadata_algorithm();
119 }
120}