Chromium Code Reviews| Index: Source/core/html/MediaController.cpp |
| diff --git a/Source/core/html/MediaController.cpp b/Source/core/html/MediaController.cpp |
| index 7835e2307a6efa23b6df4cd0c142aceec4d83362..38fcffb51caae244ed4c6cc7245041f45ef60507 100644 |
| --- a/Source/core/html/MediaController.cpp |
| +++ b/Source/core/html/MediaController.cpp |
| @@ -38,9 +38,10 @@ |
| #include "wtf/StdLibExtras.h" |
| #include "wtf/text/AtomicString.h" |
| -using namespace WebCore; |
| using namespace std; |
| +namespace WebCore { |
| + |
| PassRefPtrWillBeRawPtr<MediaController> MediaController::create(ExecutionContext* context) |
| { |
| return adoptRefWillBeRefCountedGarbageCollected(new MediaController(context)); |
| @@ -73,7 +74,7 @@ void MediaController::addMediaElement(HTMLMediaElement* element) |
| ASSERT(element); |
| ASSERT(!m_mediaElements.contains(element)); |
| - m_mediaElements.append(element); |
| + m_mediaElements.appendOrMoveToLast(element); |
|
Mads Ager (chromium)
2014/06/06 08:49:08
You can just use add here. There is an assert abov
sof
2014/06/06 12:36:59
Done.
|
| bringElementUpToSpeed(element); |
| } |
| @@ -92,9 +93,10 @@ PassRefPtr<TimeRanges> MediaController::buffered() const |
| // The buffered attribute must return a new static normalized TimeRanges object that represents |
| // the intersection of the ranges of the media resources of the slaved media elements that the |
| // user agent has buffered, at the time the attribute is evaluated. |
| - RefPtr<TimeRanges> bufferedRanges = m_mediaElements.first()->buffered(); |
| - for (size_t index = 1; index < m_mediaElements.size(); ++index) |
| - bufferedRanges->intersectWith(m_mediaElements[index]->buffered().get()); |
| + MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
| + RefPtr<TimeRanges> bufferedRanges = (*it)->buffered(); |
| + for (++it; it != m_mediaElements.end(); ++it) |
| + bufferedRanges->intersectWith((*it)->buffered().get()); |
| return bufferedRanges; |
| } |
| @@ -106,9 +108,10 @@ PassRefPtr<TimeRanges> MediaController::seekable() const |
| // The seekable attribute must return a new static normalized TimeRanges object that represents |
| // the intersection of the ranges of the media resources of the slaved media elements that the |
| // user agent is able to seek to, at the time the attribute is evaluated. |
| - RefPtr<TimeRanges> seekableRanges = m_mediaElements.first()->seekable(); |
| - for (size_t index = 1; index < m_mediaElements.size(); ++index) |
| - seekableRanges->intersectWith(m_mediaElements[index]->seekable().get()); |
| + MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
| + RefPtr<TimeRanges> seekableRanges = (*it)->seekable(); |
| + for (++it; it != m_mediaElements.end(); ++it) |
| + seekableRanges->intersectWith((*it)->seekable().get()); |
| return seekableRanges; |
| } |
| @@ -120,9 +123,10 @@ PassRefPtr<TimeRanges> MediaController::played() |
| // The played attribute must return a new static normalized TimeRanges object that represents |
| // the union of the ranges of the media resources of the slaved media elements that the |
| // user agent has so far rendered, at the time the attribute is evaluated. |
| - RefPtr<TimeRanges> playedRanges = m_mediaElements.first()->played(); |
| - for (size_t index = 1; index < m_mediaElements.size(); ++index) |
| - playedRanges->unionWith(m_mediaElements[index]->played().get()); |
| + MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
| + RefPtr<TimeRanges> playedRanges = (*it)->played(); |
| + for (++it; it != m_mediaElements.end(); ++it) |
| + playedRanges->unionWith((*it)->played().get()); |
| return playedRanges; |
| } |
| @@ -131,8 +135,8 @@ double MediaController::duration() const |
| // FIXME: Investigate caching the maximum duration and only updating the cached value |
| // when the slaved media elements' durations change. |
| double maxDuration = 0; |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
| - double duration = m_mediaElements[index]->duration(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
| + double duration = (*it)->duration(); |
| if (std::isnan(duration)) |
| continue; |
| maxDuration = max(maxDuration, duration); |
| @@ -170,8 +174,8 @@ void MediaController::setCurrentTime(double time, ExceptionState& exceptionState |
| m_clock->setCurrentTime(time); |
| // Seek each slaved media element to the new playback position relative to the media element timeline. |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->seek(time, exceptionState); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->seek(time, exceptionState); |
| scheduleTimeupdateEvent(); |
| } |
| @@ -194,8 +198,8 @@ void MediaController::play() |
| { |
| // When the play() method is invoked, the user agent must invoke the play method of each |
| // slaved media element in turn, |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->play(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->play(); |
| // and then invoke the unpause method of the MediaController. |
| unpause(); |
| @@ -242,8 +246,8 @@ void MediaController::setPlaybackRate(double rate) |
| // playback rate to the new value, |
| m_clock->setPlayRate(rate); |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->updatePlaybackRate(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->updatePlaybackRate(); |
| // then queue a task to fire a simple event named ratechange at the MediaController. |
| scheduleEvent(EventTypeNames::ratechange); |
| @@ -268,8 +272,8 @@ void MediaController::setVolume(double level, ExceptionState& exceptionState) |
| // and queue a task to fire a simple event named volumechange at the MediaController. |
| scheduleEvent(EventTypeNames::volumechange); |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->updateVolume(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->updateVolume(); |
| } |
| void MediaController::setMuted(bool flag) |
| @@ -284,8 +288,8 @@ void MediaController::setMuted(bool flag) |
| // and queue a task to fire a simple event named volumechange at the MediaController. |
| scheduleEvent(EventTypeNames::volumechange); |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->updateVolume(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->updateVolume(); |
| } |
| static const AtomicString& playbackStateWaiting() |
| @@ -357,9 +361,10 @@ void MediaController::updateReadyState() |
| } else { |
| // Otherwise, let it have the lowest value of the readyState IDL attributes of all of its |
| // slaved media elements. |
| - newReadyState = m_mediaElements.first()->readyState(); |
| - for (size_t index = 1; index < m_mediaElements.size(); ++index) |
| - newReadyState = min(newReadyState, m_mediaElements[index]->readyState()); |
| + MediaElementSequence::const_iterator it = m_mediaElements.begin(); |
| + newReadyState = (*it)->readyState(); |
| + for (++it; it != m_mediaElements.end(); ++it) |
| + newReadyState = min(newReadyState, (*it)->readyState()); |
| } |
| if (newReadyState == oldReadyState) |
| @@ -467,8 +472,8 @@ void MediaController::updatePlaybackState() |
| void MediaController::updateMediaElements() |
| { |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) |
| - m_mediaElements[index]->updatePlayState(); |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) |
| + (*it)->updatePlayState(); |
| } |
| void MediaController::bringElementUpToSpeed(HTMLMediaElement* element) |
| @@ -493,8 +498,8 @@ bool MediaController::isRestrained() const |
| bool anyAutoplayingAndPaused = false; |
| bool allPaused = true; |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
| - HTMLMediaElement* element = m_mediaElements[index]; |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
| + HTMLMediaElement* element = *it; |
| // and none of its slaved media elements are blocked media elements, |
| if (element->isBlocked()) |
| @@ -523,8 +528,8 @@ bool MediaController::isBlocked() const |
| return true; |
| bool allPaused = true; |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
| - HTMLMediaElement* element = m_mediaElements[index]; |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
| + HTMLMediaElement* element = *it; |
| // or if any of its slaved media elements are blocked media elements, |
| if (element->isBlocked()) |
| @@ -555,8 +560,8 @@ bool MediaController::hasEnded() const |
| return false; |
| bool allHaveEnded = true; |
| - for (size_t index = 0; index < m_mediaElements.size(); ++index) { |
| - if (!m_mediaElements[index]->ended()) |
| + for (MediaElementSequence::const_iterator it = m_mediaElements.begin(); it != m_mediaElements.end(); ++it) { |
| + if (!(*it)->ended()) |
| allHaveEnded = false; |
| } |
| return allHaveEnded; |
| @@ -605,3 +610,11 @@ void MediaController::scheduleTimeupdateEvent() |
| scheduleEvent(EventTypeNames::timeupdate); |
| m_previousTimeupdateTime = now; |
| } |
| + |
| +void MediaController::trace(Visitor* visitor) |
| +{ |
| + visitor->trace(m_mediaElements); |
| + EventTargetWithInlineData::trace(visitor); |
| +} |
| + |
| +} |