| Index: Source/core/html/MediaController.cpp | 
| diff --git a/Source/core/html/MediaController.cpp b/Source/core/html/MediaController.cpp | 
| index bc7cd178ab503724f2257d7f16cdbcaadd4c9455..38fcffb51caae244ed4c6cc7245041f45ef60507 100644 | 
| --- a/Source/core/html/MediaController.cpp | 
| +++ b/Source/core/html/MediaController.cpp | 
| @@ -38,10 +38,11 @@ | 
| #include "wtf/StdLibExtras.h" | 
| #include "wtf/text/AtomicString.h" | 
|  | 
| -using namespace WebCore; | 
| using namespace std; | 
|  | 
| -PassRefPtr<MediaController> MediaController::create(ExecutionContext* context) | 
| +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); | 
| 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); | 
| +} | 
| + | 
| +} | 
|  |