mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #21506 - ferjm:webaudio.wpts, r=Manishearth
Fix some WebAudio WPTs - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] There are tests for these changes <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/21506) <!-- Reviewable:end -->
This commit is contained in:
commit
9ee8890a72
26 changed files with 1584 additions and 1812 deletions
|
@ -29,6 +29,7 @@ use std::f32;
|
|||
pub struct AudioBufferSourceNode {
|
||||
source_node: AudioScheduledSourceNode,
|
||||
buffer: MutNullableDom<AudioBuffer>,
|
||||
buffer_set: Cell<bool>,
|
||||
playback_rate: Dom<AudioParam>,
|
||||
detune: Dom<AudioParam>,
|
||||
loop_enabled: Cell<bool>,
|
||||
|
@ -75,6 +76,7 @@ impl AudioBufferSourceNode {
|
|||
let node = AudioBufferSourceNode {
|
||||
source_node,
|
||||
buffer: Default::default(),
|
||||
buffer_set: Cell::new(false),
|
||||
playback_rate: Dom::from_ref(&playback_rate),
|
||||
detune: Dom::from_ref(&detune),
|
||||
loop_enabled: Cell::new(options.loop_),
|
||||
|
@ -122,12 +124,19 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode {
|
|||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audiobuffersourcenode-buffer
|
||||
fn SetBuffer(&self, new_buffer: Option<&AudioBuffer>) -> Fallible<()> {
|
||||
if new_buffer.is_some() && self.buffer.get().is_some() {
|
||||
return Err(Error::InvalidState);
|
||||
if new_buffer.is_some() {
|
||||
if self.buffer_set.get() {
|
||||
// Step 2.
|
||||
return Err(Error::InvalidState);
|
||||
}
|
||||
// Step 3.
|
||||
self.buffer_set.set(true);
|
||||
}
|
||||
|
||||
// Step 4.
|
||||
self.buffer.set(new_buffer);
|
||||
|
||||
// Step 5.
|
||||
if self.source_node.started() {
|
||||
if let Some(buffer) = self.buffer.get() {
|
||||
let buffer = buffer.acquire_contents();
|
||||
|
@ -191,10 +200,6 @@ impl AudioBufferSourceNodeMethods for AudioBufferSourceNode {
|
|||
offset: Option<Finite<f64>>,
|
||||
duration: Option<Finite<f64>>,
|
||||
) -> 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()));
|
||||
|
|
|
@ -59,6 +59,10 @@ impl AudioScheduledSourceNodeMethods for AudioScheduledSourceNode {
|
|||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audioscheduledsourcenode-start
|
||||
fn Start(&self, when: Finite<f64>) -> Fallible<()> {
|
||||
if *when < 0. {
|
||||
return Err(Error::Range("'when' must be a positive value".to_owned()));
|
||||
}
|
||||
|
||||
if self.started.get() || self.stopped.get() {
|
||||
return Err(Error::InvalidState);
|
||||
}
|
||||
|
@ -99,6 +103,10 @@ impl AudioScheduledSourceNodeMethods for AudioScheduledSourceNode {
|
|||
|
||||
// https://webaudio.github.io/web-audio-api/#dom-audioscheduledsourcenode-stop
|
||||
fn Stop(&self, when: Finite<f64>) -> Fallible<()> {
|
||||
if *when < 0. {
|
||||
return Err(Error::Range("'when' must be a positive value".to_owned()));
|
||||
}
|
||||
|
||||
if !self.started.get() {
|
||||
return Err(Error::InvalidState);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue