aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/baseaudiocontext.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2018-07-10 00:34:11 -0700
committerFernando Jiménez Moreno <ferjmoreno@gmail.com>2018-07-30 14:21:45 +0200
commit723f1b058261f2ab2d52e8a98da1f178075930b9 (patch)
treec2064fcf2bd77d0fc1c08094f22dfe89c407c517 /components/script/dom/baseaudiocontext.rs
parent6ac4b4b8e0aad2aaa0c383ddfabab5f0597dff2a (diff)
downloadservo-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.rs26
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