diff --git a/components/script/dom/audiobuffer.rs b/components/script/dom/audiobuffer.rs index 1119b3c868e..c95a04cdac3 100644 --- a/components/script/dom/audiobuffer.rs +++ b/components/script/dom/audiobuffer.rs @@ -40,11 +40,7 @@ pub struct AudioBuffer { impl AudioBuffer { #[allow(unrooted_must_root)] #[allow(unsafe_code)] - pub fn new_inherited( - number_of_channels: u32, - length: u32, - sample_rate: f32, - ) -> AudioBuffer { + pub fn new_inherited(number_of_channels: u32, length: u32, sample_rate: f32) -> AudioBuffer { let vec = (0..number_of_channels).map(|_| Heap::default()).collect(); AudioBuffer { reflector_: Reflector::new(), @@ -68,11 +64,7 @@ impl AudioBuffer { sample_rate: f32, initial_data: Option<&[f32]>, ) -> DomRoot { - let buffer = AudioBuffer::new_inherited( - number_of_channels, - length, - sample_rate, - ); + let buffer = AudioBuffer::new_inherited(number_of_channels, length, sample_rate); let buffer = reflect_dom_object(Box::new(buffer), global, AudioBufferBinding::Wrap); buffer.set_channels(initial_data); buffer @@ -84,8 +76,9 @@ impl AudioBuffer { options: &AudioBufferOptions, ) -> Fallible> { if options.numberOfChannels > MAX_CHANNEL_COUNT || - *options.sampleRate < MIN_SAMPLE_RATE || - *options.sampleRate > MAX_SAMPLE_RATE { + *options.sampleRate < MIN_SAMPLE_RATE || + *options.sampleRate > MAX_SAMPLE_RATE + { return Err(Error::NotSupported); } Ok(AudioBuffer::new( @@ -124,7 +117,7 @@ impl AudioBuffer { array.handle_mut(), ) }; - } + }, } chans[channel as usize].set(array.get()); } @@ -167,7 +160,8 @@ impl AudioBuffer { typedarray!(in(cx) let array: Float32Array = channel.get()); if let Ok(array) = array { let data = array.to_vec(); - let _ = JS_DetachArrayBuffer(cx, channel.handle(), DetachDataDisposition::KeepData); + let _ = + JS_DetachArrayBuffer(cx, channel.handle(), DetachDataDisposition::KeepData); data } else { return None; diff --git a/components/script/dom/audiobuffersourcenode.rs b/components/script/dom/audiobuffersourcenode.rs index 2aad2004c20..79841e38e22 100644 --- a/components/script/dom/audiobuffersourcenode.rs +++ b/components/script/dom/audiobuffersourcenode.rs @@ -179,9 +179,27 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode { fn Start( &self, when: Finite, - _offset: Option>, - _duration: Option>, + offset: Option>, + duration: Option>, ) -> Fallible<()> { + if *when < 0. { + return Err(Error::Range("'when' must be a positive value".to_owned())); + } + + if let Some(offset) = offset { + if *offset < 0. { + return Err(Error::Range("'offset' must be a positive value".to_owned())); + } + } + + if let Some(duration) = duration { + if *duration < 0. { + return Err(Error::Range( + "'duration' must be a positive value".to_owned(), + )); + } + } + if let Some(buffer) = self.buffer.get() { let buffer = buffer.acquire_contents(); self.source_node