diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2018-07-10 00:34:11 -0700 |
---|---|---|
committer | Fernando Jiménez Moreno <ferjmoreno@gmail.com> | 2018-07-30 14:21:45 +0200 |
commit | 723f1b058261f2ab2d52e8a98da1f178075930b9 (patch) | |
tree | c2064fcf2bd77d0fc1c08094f22dfe89c407c517 /components/script/dom/baseaudiocontext.rs | |
parent | 6ac4b4b8e0aad2aaa0c383ddfabab5f0597dff2a (diff) | |
download | servo-723f1b058261f2ab2d52e8a98da1f178075930b9.tar.gz servo-723f1b058261f2ab2d52e8a98da1f178075930b9.zip |
Fix construction of destination node (#6)
* Fix comparison of audiocontexts
* Fix comparison
* Fix destination node construction
Diffstat (limited to 'components/script/dom/baseaudiocontext.rs')
-rw-r--r-- | components/script/dom/baseaudiocontext.rs | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/components/script/dom/baseaudiocontext.rs b/components/script/dom/baseaudiocontext.rs index 4404a519312..c09fe9971f5 100644 --- a/components/script/dom/baseaudiocontext.rs +++ b/components/script/dom/baseaudiocontext.rs @@ -22,7 +22,7 @@ use dom::bindings::inheritance::Castable; use dom::bindings::num::Finite; use dom::bindings::refcounted::Trusted; use dom::bindings::reflector::DomObject; -use dom::bindings::root::DomRoot; +use dom::bindings::root::{DomRoot, MutNullableDom}; use dom::domexception::{DOMErrorName, DOMException}; use dom::eventtarget::EventTarget; use dom::gainnode::GainNode; @@ -65,7 +65,7 @@ pub struct BaseAudioContext { #[ignore_malloc_size_of = "servo_media"] audio_context_impl: Rc<AudioContext>, /// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-destination - destination: Option<DomRoot<AudioDestinationNode>>, + destination: MutNullableDom<AudioDestinationNode>, /// Resume promises which are soon to be fulfilled by a queued task. #[ignore_malloc_size_of = "promises are hard"] in_flight_resume_promises_queue: DomRefCell<VecDeque<(Box<[Rc<Promise>]>, ErrorResult)>>, @@ -87,7 +87,7 @@ pub struct BaseAudioContext { impl BaseAudioContext { #[allow(unrooted_must_root)] pub fn new_inherited( - global: &GlobalScope, + _: &GlobalScope, options: BaseAudioContextOptions, ) -> BaseAudioContext { let options = match options { @@ -97,10 +97,10 @@ impl BaseAudioContext { let sample_rate = options.sample_rate; - let mut context = BaseAudioContext { + let context = BaseAudioContext { eventtarget: EventTarget::new_inherited(), audio_context_impl: Rc::new(ServoMedia::get().unwrap().create_audio_context(options.into())), - destination: None, + destination: Default::default(), in_flight_resume_promises_queue: Default::default(), pending_resume_promises: Default::default(), decode_resolvers: Default::default(), @@ -108,13 +108,6 @@ impl BaseAudioContext { state: Cell::new(AudioContextState::Suspended), }; - let mut options = AudioNodeOptions::empty(); - options.channelCount = Some(2); - options.channelCountMode = Some(ChannelCountMode::Explicit); - options.channelInterpretation = Some(ChannelInterpretation::Speakers); - - context.destination = Some(AudioDestinationNode::new(global, &context, &options)); - context } @@ -280,7 +273,14 @@ impl BaseAudioContextMethods for BaseAudioContext { /// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-destination fn Destination(&self) -> DomRoot<AudioDestinationNode> { - DomRoot::from_ref(self.destination.as_ref().unwrap()) + let global = self.global(); + self.destination.or_init(|| { + let mut options = AudioNodeOptions::empty(); + options.channelCount = Some(2); + options.channelCountMode = Some(ChannelCountMode::Explicit); + options.channelInterpretation = Some(ChannelInterpretation::Speakers); + AudioDestinationNode::new(&global, self, &options) + }) } /// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-onstatechange |