| Index: Source/core/html/HTMLMediaElement.cpp
|
| diff --git a/Source/core/html/HTMLMediaElement.cpp b/Source/core/html/HTMLMediaElement.cpp
|
| index e1d893b8f8c686596a7d8302bfef9a3c404c3509..ef80c5e082efea1d2942b61cee39af8ebb7bd8fa 100644
|
| --- a/Source/core/html/HTMLMediaElement.cpp
|
| +++ b/Source/core/html/HTMLMediaElement.cpp
|
| @@ -668,7 +668,7 @@ void HTMLMediaElement::prepareForLoad()
|
| }
|
|
|
| // 5 - Set the playbackRate attribute to the value of the defaultPlaybackRate attribute.
|
| - setPlaybackRate(defaultPlaybackRate());
|
| + setPlaybackRate(defaultPlaybackRate(), IGNORE_EXCEPTION);
|
|
|
| // 6 - Set the error attribute to null and the autoplaying flag to true.
|
| m_error = nullptr;
|
| @@ -1870,6 +1870,10 @@ double HTMLMediaElement::currentTime() const
|
|
|
| void HTMLMediaElement::setCurrentTime(double time, ExceptionState& exceptionState)
|
| {
|
| + if (!std::isfinite(time)) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(time));
|
| + return;
|
| + }
|
| if (m_mediaController) {
|
| exceptionState.throwDOMException(InvalidStateError, "The element is slaved to a MediaController.");
|
| return;
|
| @@ -1908,8 +1912,12 @@ double HTMLMediaElement::defaultPlaybackRate() const
|
| return m_defaultPlaybackRate;
|
| }
|
|
|
| -void HTMLMediaElement::setDefaultPlaybackRate(double rate)
|
| +void HTMLMediaElement::setDefaultPlaybackRate(double rate, ExceptionState& exceptionState)
|
| {
|
| + if (!std::isfinite(rate)) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(rate));
|
| + return;
|
| + }
|
| if (m_defaultPlaybackRate != rate) {
|
| m_defaultPlaybackRate = rate;
|
| scheduleEvent(EventTypeNames::ratechange);
|
| @@ -1921,10 +1929,15 @@ double HTMLMediaElement::playbackRate() const
|
| return m_playbackRate;
|
| }
|
|
|
| -void HTMLMediaElement::setPlaybackRate(double rate)
|
| +void HTMLMediaElement::setPlaybackRate(double rate, ExceptionState& exceptionState)
|
| {
|
| WTF_LOG(Media, "HTMLMediaElement::setPlaybackRate(%f)", rate);
|
|
|
| + if (!std::isfinite(rate)) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(rate));
|
| + return;
|
| + }
|
| +
|
| if (m_playbackRate != rate) {
|
| m_playbackRate = rate;
|
| invalidateCachedTime();
|
| @@ -2089,6 +2102,11 @@ void HTMLMediaElement::setVolume(double vol, ExceptionState& exceptionState)
|
| {
|
| WTF_LOG(Media, "HTMLMediaElement::setVolume(%f)", vol);
|
|
|
| + if (!std::isfinite(vol)) {
|
| + exceptionState.throwTypeError(ExceptionMessages::notAFiniteNumber(vol));
|
| + return;
|
| + }
|
| +
|
| if (vol < 0.0f || vol > 1.0f) {
|
| exceptionState.throwDOMException(IndexSizeError, ExceptionMessages::indexOutsideRange("volume", vol, 0.0, ExceptionMessages::InclusiveBound, 1.0, ExceptionMessages::InclusiveBound));
|
| return;
|
|
|