-
eric.carlson@apple.com authored
Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=46763 CRASH in WebCore::ThreadTimers::sharedTimerFiredInternal Fix crashes caused by moving and deleting <source> element(s) of active media element. Tests: media/video-source-moved.html media/video-source-removed.html * html/HTMLMediaElement.cpp: (WebCore::HTMLMediaElement::HTMLMediaElement): Add logging. Initialize selectNextSourceChild. (WebCore::HTMLMediaElement::~HTMLMediaElement): Ditto. (WebCore::HTMLMediaElement::insertedIntoDocument): Ditto. (WebCore::HTMLMediaElement::removedFromDocument): Ditto. (WebCore::HTMLMediaElement::scheduleLoad): Ditto. (WebCore::HTMLMediaElement::setNetworkState): Deal with m_currentSourceNode being null when the media engine signals a failure by skipping the error message and continuing as usual. (WebCore::HTMLMediaElement::setVolume): Fix logging typo. (WebCore::HTMLMediaElement::havePotentialSourceChild): Save and restore m_nextChildNodeToConsider around call to selectNextSourceChild because they are both significant. (WebCore::HTMLMediaElement::selectNextSourceChild): Use m_nextChildNodeToConsider to pick the first node to consider. Bail immediately if it signals that we have already processed every <source> node. Stach the node following the current source element in m_nextChildNodeToConsider so we can resume the search even if m_currentSourceNode is removed while it is being processed. (WebCore::HTMLMediaElement::sourceWasAdded): New, move logic from HTMLSourceElement::insertedIntoTree here and correct it to deal with a <source> node being inserted immediately after the current <source> node and a new <source> node being inserted at the end of the list after all candidates have failed. (WebCore::HTMLMediaElement::sourceWillBeRemoved): New, deal with current source node and next potential node being removed. * html/HTMLMediaElement.h: (WebCore::HTMLMediaElement::sourceChildEndOfListValue): New, define sentinal value used to indicate that all nodes have been processed. * html/HTMLSourceElement.cpp: (WebCore::HTMLSourceElement::HTMLSourceElement): Add logging. (WebCore::HTMLSourceElement::insertedIntoTree): Call mediaElement->sourceWasAdded instead of having logic here. (WebCore::HTMLSourceElement::willRemove): New, call mediaElement->sourceWillBeRemoved (WebCore::HTMLSourceElement::scheduleErrorEvent): Add logging. (WebCore::HTMLSourceElement::cancelPendingErrorEvent): Add logging. * html/HTMLSourceElement.h: 2010-10-19 Eric Carlson <eric.carlson@apple.com> Reviewed by Darin Adler. https://bugs.webkit.org/show_bug.cgi?id=46763 CRASH in WebCore::ThreadTimers::sharedTimerFiredInternal Test moving and deleting <source> element(s) of active <video>. * media/media-file.js: (mimeTypeForExtension): New, added to make it possible to set 'type' attribute on <source>. * media/video-source-moved-expected.txt: Added. * media/video-source-moved.html: Added. * media/video-source-removed-expected.txt: Added. * media/video-source-removed.html: Added. git-svn-id: http://svn.webkit.org/repository/webkit/trunk@70063 268f45cc-cd09-0410-ab3c-d52691b4dbfc
d041ae7b