Bug 1308436 - Throw proper exceptions when passing in out of range time values in automation methods. r?karlt
MozReview-Commit-ID: 8ApTuKJZNrd
--- a/dom/media/webaudio/AudioEventTimeline.h
+++ b/dom/media/webaudio/AudioEventTimeline.h
@@ -140,17 +140,17 @@ public:
auto TimeOf = [](const AudioTimelineEvent& aEvent) -> double {
return aEvent.template Time<double>();
};
// Validate the event itself
if (!WebAudioUtils::IsTimeValid(TimeOf(aEvent)) ||
!WebAudioUtils::IsTimeValid(aEvent.mTimeConstant)) {
- aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return false;
}
if (aEvent.mType == AudioTimelineEvent::SetValueCurve) {
if (!aEvent.mCurve || !aEvent.mCurveLength) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return false;
}
@@ -158,17 +158,17 @@ public:
aRv.Throw(NS_ERROR_RANGE_ERR);
return false;
}
}
bool timeAndValueValid = IsValid(aEvent.mValue) &&
IsValid(aEvent.mDuration);
if (!timeAndValueValid) {
- aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return false;
}
if (aEvent.mType == AudioTimelineEvent::SetValueCurve) {
if (aEvent.mCurveLength < 2) {
aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
return false;
}
@@ -205,17 +205,17 @@ public:
return false;
}
}
}
// Make sure that invalid values are not used for exponential curves
if (aEvent.mType == AudioTimelineEvent::ExponentialRamp) {
if (aEvent.mValue <= 0.f) {
- aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return false;
}
const AudioTimelineEvent* previousEvent = GetPreviousEvent(TimeOf(aEvent));
if (previousEvent) {
if (previousEvent->mValue <= 0.f) {
aRv.Throw(NS_ERROR_DOM_SYNTAX_ERR);
return false;
}
--- a/dom/media/webaudio/AudioParam.h
+++ b/dom/media/webaudio/AudioParam.h
@@ -46,17 +46,17 @@ public:
// We override SetValueCurveAtTime to convert the Float32Array to the wrapper
// object.
AudioParam* SetValueCurveAtTime(const nsTArray<float>& aValues,
double aStartTime,
double aDuration,
ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aStartTime)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aStartTime = std::max(aStartTime, GetParentObject()->CurrentTime());
EventInsertionHelper(aRv, AudioTimelineEvent::SetValueCurve,
aStartTime, 0.0f, 0.0f, aDuration, aValues.Elements(),
aValues.Length());
if (aRv.Failed()) {
@@ -82,71 +82,71 @@ public:
AudioParamTimeline::SetValue(aValue);
SendEventToEngine(event);
}
AudioParam* SetValueAtTime(float aValue, double aStartTime, ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aStartTime)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aStartTime = std::max(aStartTime, GetParentObject()->CurrentTime());
EventInsertionHelper(aRv, AudioTimelineEvent::SetValueAtTime,
aStartTime, aValue);
return this;
}
AudioParam* LinearRampToValueAtTime(float aValue, double aEndTime,
ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aEndTime)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aEndTime = std::max(aEndTime, GetParentObject()->CurrentTime());
EventInsertionHelper(aRv, AudioTimelineEvent::LinearRamp, aEndTime, aValue);
return this;
}
AudioParam* ExponentialRampToValueAtTime(float aValue, double aEndTime,
ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aEndTime)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aEndTime = std::max(aEndTime, GetParentObject()->CurrentTime());
EventInsertionHelper(aRv, AudioTimelineEvent::ExponentialRamp,
aEndTime, aValue);
return this;
}
AudioParam* SetTargetAtTime(float aTarget, double aStartTime,
double aTimeConstant, ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aStartTime) ||
!WebAudioUtils::IsTimeValid(aTimeConstant)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aStartTime = std::max(aStartTime, GetParentObject()->CurrentTime());
EventInsertionHelper(aRv, AudioTimelineEvent::SetTarget,
aStartTime, aTarget,
aTimeConstant);
return this;
}
AudioParam* CancelScheduledValues(double aStartTime, ErrorResult& aRv)
{
if (!WebAudioUtils::IsTimeValid(aStartTime)) {
- aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
+ aRv.Throw(NS_ERROR_RANGE_ERR);
return this;
}
aStartTime = std::max(aStartTime, GetParentObject()->CurrentTime());
// Remove some events on the main thread copy.
AudioEventTimeline::CancelScheduledValues(aStartTime);