diff --git a/components/script/dom/pannernode.rs b/components/script/dom/pannernode.rs index 9a596ab91b5..089de7c1ec4 100644 --- a/components/script/dom/pannernode.rs +++ b/components/script/dom/pannernode.rs @@ -10,7 +10,7 @@ use dom::bindings::codegen::Bindings::AudioNodeBinding::AudioNodeOptions; use dom::bindings::codegen::Bindings::AudioParamBinding::{AudioParamMethods, AutomationRate}; use dom::bindings::codegen::Bindings::PannerNodeBinding::{self, PannerNodeMethods, PannerOptions}; use dom::bindings::codegen::Bindings::PannerNodeBinding::{DistanceModelType, PanningModelType}; -use dom::bindings::error::Fallible; +use dom::bindings::error::{Error, Fallible}; use dom::bindings::inheritance::Castable; use dom::bindings::num::Finite; use dom::bindings::reflector::reflect_dom_object; @@ -232,20 +232,28 @@ impl PannerNodeMethods for PannerNode { Finite::wrap(self.max_distance.get()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-maxdistance - fn SetMaxDistance(&self, val: Finite) { + fn SetMaxDistance(&self, val: Finite) -> Fallible<()> { + if *val < 0. { + return Err(Error::NotSupported) + } self.max_distance.set(*val); let msg = PannerNodeMessage::SetMaxDistance(self.max_distance.get()); self.upcast::().message(AudioNodeMessage::PannerNode(msg)); + Ok(()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor fn RolloffFactor(&self) -> Finite { Finite::wrap(self.rolloff_factor.get()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-rollofffactor - fn SetRolloffFactor(&self, val: Finite) { + fn SetRolloffFactor(&self, val: Finite) -> Fallible<()> { + if *val < 0. { + return Err(Error::Range("value should be positive".into())) + } self.rolloff_factor.set(*val); let msg = PannerNodeMessage::SetRolloff(self.rolloff_factor.get()); self.upcast::().message(AudioNodeMessage::PannerNode(msg)); + Ok(()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-coneinnerangle fn ConeInnerAngle(&self) -> Finite { @@ -272,10 +280,14 @@ impl PannerNodeMethods for PannerNode { Finite::wrap(self.cone_outer_gain.get()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-coneoutergain - fn SetConeOuterGain(&self, val: Finite) { + fn SetConeOuterGain(&self, val: Finite) -> Fallible<()> { + if *val < 0. || *val > 360. { + return Err(Error::InvalidState) + } self.cone_outer_gain.set(*val); let msg = PannerNodeMessage::SetConeGain(self.cone_outer_gain.get()); self.upcast::().message(AudioNodeMessage::PannerNode(msg)); + Ok(()) } // https://webaudio.github.io/web-audio-api/#dom-pannernode-setposition diff --git a/components/script/dom/webidls/PannerNode.webidl b/components/script/dom/webidls/PannerNode.webidl index e762d9dd110..18d01f52b11 100644 --- a/components/script/dom/webidls/PannerNode.webidl +++ b/components/script/dom/webidls/PannerNode.webidl @@ -46,11 +46,11 @@ interface PannerNode : AudioNode { readonly attribute AudioParam orientationZ; attribute DistanceModelType distanceModel; attribute double refDistance; - attribute double maxDistance; - attribute double rolloffFactor; + [SetterThrows] attribute double maxDistance; + [SetterThrows] attribute double rolloffFactor; attribute double coneInnerAngle; attribute double coneOuterAngle; - attribute double coneOuterGain; + [SetterThrows] attribute double coneOuterGain; void setPosition (float x, float y, float z); void setOrientation (float x, float y, float z); };